假设您有一个名为Ninja的大型(python)软件项目。该项目有几个部分,如服务器和客户端,而且还包含一个通用的基础结构库,其中包含常用的类和工具。当然,我会创建一个像这样的包裹结构:ninja.core
,ninja.server
和ninja.client
,其中服务器和客户端以某种方式导入ninja.core
。为发展宗旨(我们使用Eclipse与Subversion)的核心,服务器和客户保持在不同的项目,从而导致在一个文件夹结构是这样的:不同项目的python库如何处于同一个包中?
eclipse_workspace
|
>-Ninja_core
| |
| >-ninja
| |
| >-core
|
>-Ninja_client
| |
| >-ninja
| |
| >-client
.
.
.
有一个Java的背景我假设这将是可能的,但事实证明(读取:导入错误),这是行不通的。正如this answer指出的那样,它通常是不可能有两个ninja.core
和ninja.client
除非它们是相同的包ninja
,其中它们不是子包。这样就产生了:
解决方法A:
- 放在一个单一的Eclipse/SVN项目整个代码和只有一个 包
ninja
与根据子包。
在生产环境中,我们希望能够安装核心和服务器但不客户或核心和客户但不服务器。我可能会误解,但据我了解python包,这是不可能的方法A.保持项目分开但兼容,使用包名称为ninja_core
,ninja_client
和ninja_server
,它似乎是有用的事实上解决了进口问题,并使开发设置中的一切顺利运行。为了满足能够安装服务器和客户独立的要求,我想出的主意:
方法B:
- 创建一个名为忍者新的项目,包含软件包
ninja
- 让的
ninja
导入其他库(如果安装的话),看起来是在之内。
我还没有得到这个工作到目前为止,我认为它可能不可能。我在想这样的事情:
# __init__.py of ninja
import ninja_core as core
# or this:
from ninja_core import core
# or this:
import ninja_core.core
我试过这些,又得到了导入错误。在google搜索结合python软件包的方法并没有找到与我的问题相关的任何东西之后,我来到了这里。
我在想,也许整件事都是设计错误。应该客户端和服务器即使它们可以独立安装在同一个包中?想要独立安装客户端和服务器是不是一个好主意?为什么我可以在java中使用扩展包,但是不能在python中使用?这背后的想法是什么?
TL;博士
我开发的忍者图书馆,用户应该能够做到import ninja.client
和import ninja.server
。需要分别为客户端和服务器安装库。如何实现这一目标?
它的工作原理,但由于'ninja'文件夹中不包含'__init __。py',eclipse不能识别任何子文件夹是软件包。有没有一个选项或简单的解决方法呢? – nfs
对不起,不知道;我自己不使用Eclipse或PyDev;一个快速的谷歌显示其他人抱怨,但我没有看到任何简单的修复你。 –