我想知道是否有人可以阐明这一点.我们有多个具有相同根包的包库,例如a.我也有包a.b位于X和包a.c位于Y. X和Y都在我PYTHONPATH和我当时:
import a.c
import a.b
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:"No module named b".阅读后,在我看来,一旦a.c加载python也写信息a,当我来做,a.b因为它有关于a已经的信息它从来没有困扰在位置X寻找a.b并抛出一个错误,没有b找到任何模块名称.
而且,我发现在X中指定X和Y的顺序PYTHONPATH似乎会影响导入.例如,当我这样做
PYTHONPATH=$PYTHONPATH:X:Y python
>>> import a.b # works
>>> import a.c # fails
Run Code Online (Sandbox Code Playgroud)
但如果我这样做
PYTHONPATH=$PYTHONPATH:Y:X python
>>> import a.b # fails
>>> import a.c # works
Run Code Online (Sandbox Code Playgroud)
这是正确的,如果是这样,我该如何解决这个问题?拥有一个通用的模块根名称和不同的子包位于不同的项目等是很方便的.当然,我从Java的角度来看你可以做这种重叠.
我找到了相关的问题但却失去了联系.
解决方案包括:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Run Code Online (Sandbox Code Playgroud)
在所有项目的根目录__init__.py中.在这种情况下,BOTH在位置X和Y ^.如果您有多个级别的子包,您仍然只需要包含一次.a/__init__.py
这让我和文档的extend_path,而信息是什么__path__有用吗?
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |