【问题标题】:python import different subpackages with the same root packge name and different locationspython导入不同子包,根包名相同,位置不同
【发布时间】:2014-11-21 10:19:56
【问题描述】:

我想知道是否有人可以阐明这一点。我们有多个具有相同根包的包库,例如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 的角度来看你可以做这种重叠的。

【问题讨论】:

  • 这发生在 python 2 和 3 中

标签: python


【解决方案1】:

我找到了相关问题,但丢失了链接。

解决方案是包括:

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

所有项目的根__init__.py中。在这种情况下,a/__init__.py BOTH 位于 XY 位置。如果您有多个级别的子包,您仍然只需要包含一次。

This 帮助了我,documentation 帮助了 extend_path,以及信息 What is __path__ useful for?

【讨论】:

  • 老话题,不过我找到了python3的better way
猜你喜欢
  • 2022-06-10
  • 2015-01-27
  • 2019-06-11
  • 1970-01-01
  • 2019-10-06
  • 2012-02-14
  • 2012-12-12
  • 1970-01-01
  • 2016-04-25
相关资源
最近更新 更多