以下是我公司的一些Python包”foo.com网站“用途:
com.foo.bar.web
com.foo.bar.lib
com.foo.zig.web
com.foo.zig.lib
com.foo.zig.lib.lib1
com.foo.zig.lib.lib2
以下是在磁盘上存储源的传统方法:
^{pr2}$但出于组织目的(不同的团队、不同的修订控制等),我们希望将这些存储如下:
bar/
pysrc/
com/
foo/
bar/
web/
lib/
zig/
pysrc/
com/
foo/
zig/
web/
lib/
lib1/
lib2/
PYTHONPATH=bar/pysrc:zig/pysrc
问题是:
第二种组织方式有什么问题吗?在
例如,如果我们import com.foo
,Python将在哪里查找__init__.py
?在
符号链接这些目录有意义吗?e、 g.:
pysrc/
com/
foo/
bar/ -> symlink to /bar/pysrc/com/foo/
zig/ -> symlink to /zig/pysrc/com/foo/
欢迎任何通用代码组织建议。在
Python会通过的系统路径按顺序(包括PYTHONPATH和一些),寻找com.foo网站每个包装。它发现的第一个问题是,它将使用排除其他方法,这与Perl或Java不同,后者可以有效地合并包名称空间。您可以对
__path__
执行一些操作来更改此行为,但是“first match wins”是Python开箱即用的行为方式。在只要你保持com.foo.bar网站完全在酒吧里com.foo.zig网站完全在zig/中,第二个布局应该不会有任何问题。在
通读PEP 420 page,您似乎可以将以下
__init__.py
添加到共享包中:因此,您的目录结构如下(*-标记为
^{pr2}$__init__.py
文件具有上述代码):将python路径设置为指向
com/
目录:要测试(我在2.7.14和3.6.4中尝试过):
没有
__init__.py
代码会产生:相关问题 更多 >
编程相关推荐