2014-09-26 33 views
6

我想知道是否有人可以解释这一点。我们有多个具有相同根包的软件包库,例如a。我也有包a.b位于X和包装a.c位于Y. X和Y二者都在我的PYTHONPATH当我做:python导入具有相同根包装名称和不同位置的不同子包装

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的角度来看,你可以做这种重叠。

+0

这种情况无论是在Python 2和3 – Alex 2014-09-29 08:27:31

回答

6

我发现了相关的问题,但失去了链接。

的解决方案是包括:

from pkgutil import extend_path 
__path__ = extend_path(__path__, __name__) 

在根__init__.py所有项目。在这种情况下a/__init__.pyBOTH在位置XY。如果你有多层次的子包,你只需要包含一次。

This帮助我和documentationextend_path和信息What is __path__ useful for?

相关问题