我正在开发一个软件包" jw.data"在Python 2.7.9中,命名空间为 jw ,包中包含 data 。我已经放了规范
try:
__import__('pkg_resources').declare_namespace(__name__)
except ImportError:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
jw/__init__.py
中的。当我运行./setup.py develop
时(在setup.py中我放了namespace_packages=['jw']
),那么我就有了#j;"在jw.data.egg-info/namespace_packages.txt
。做一个
import jw.data
import jw.data.model
工作正常。所以我想我已经正确设置了命名空间包。
现在我已经在命名空间 jw 中编写了一个包" jw.util",其中包含 util 。一旦我安装它,导入 jw.data 或其下面的任何内容都会失败:
>>> import jw.data
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named data
卸载 jw.util 后再次运行。
我在其他地方使用了 jw.util ,但还没有在 jw 命名空间中的包中。看起来 jw.util 正在保留 jw 名称空间。
我在另一个命名空间遇到了同样的问题。在那里我注意到setup.py中的包名与命名空间加包相同。我重命名了&#34; namespace.package x &#34;中的所有包。 to&#34; namespace-package x &#34;,令人惊讶的是它起作用了。我尝试使用 jw.util 和 jw.data 进行相同的操作,但这里的技巧并不起作用。而且我真的不相信setup.py中的软件包名称与它包含的软件包层次结构有关,还是有它?
无论如何,任何人都知道这里发生了什么?
答案 0 :(得分:1)
似乎是Python中一个众所周知的错误。
但https://github.com/pypa/setuptools/issues/250中有一个解决方案:
简单地说,追加
;import pkg_resources; pkg_resources.fixup_namespace_packages('')
到site-packages中竞争包的 module -nspkg.pth中的单行。分号是必需的。