python导入具有相同根包名称和不同位置的不同子包

时间:2014-09-26 11:56:05

标签: python

我想知道是否有人可以阐明这一点。我们有多个包库,具有相同的根包,例如a。我的包裹a.b位于X中,包a.c位于Y. X和Y都在我的PYTHONPATH中,当我这样做时:

import a.c
import a.b

我收到错误:"No module named b"。在阅读之后,在我看来,一旦加载a.c,python也会写入关于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的角度来看你可以做这种重叠。

1 个答案:

答案 0 :(得分:6)

我找到了相关的问题但却失去了链接。

解决方案包括:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
所有项目中的根__init__.py中的

。在这种情况下,位于 X Y a/__init__.py BOTH 。如果您有多个级别的子包,您仍然只需要包含一次。

This帮助我和extend_path {{1}}和信息documentation