我想知道是否有人可以阐明这一点。我们有多个具有相同根软件包的软件包库,例如a
。我也有a.b
位于X的包和a.c
位于Y的包。X和Y都在我的容器中PYTHONPATH
,当我这样做时:
import a.c
import a.b
我收到一个错误:"No module named b"
。围绕它看完后我看来,一旦a.c
被加载蟒蛇约写入信息a
,以及,当我来干什么a.b
,因为它有关于信息a
已经它从来没有什么麻烦事看在位置X的a.b
和抛出没有名为模块的错误b
可以被发现。
此外,我发现PYTHONPATH
似乎在指定X和Y的顺序会影响导入。例如,当我做
PYTHONPATH=$PYTHONPATH:X:Y python
>>> import a.b # works
>>> import a.c # fails
但是如果我这样做
PYTHONPATH=$PYTHONPATH:Y:X python
>>> import a.b # fails
>>> import a.c # works
是正确的,如果是这样,我该如何解决?使用通用的模块根名称,并且将不同的子包驻留在不同的项目等中,这很方便。当然,我从Java的角度出发,可以进行这种重叠。
我找到了相关的问题,但是失去了链接。
解决方案包括:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
在所有项目的根源__init__.py
中。在这种情况下,BOTH在位置X和Y ^。如果您有多个级别的子包,则仍只需包含一次即可。a/__init__.py
这让我和文档的extend_path
,而信息是什么__path__有用吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句