![](/img/trans.png)
[英]pytest before 4.6 was able to import from a local package with the same name as an installed namespace package, and now it isn't. Is that a bug?
[英]Installed package stealing namespace
我正在Python 2.7.9中开发一个名为“ jw.data”的程序包,其名称空间为jw,并且其中包含一个程序包数据 。
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']
放进去),然后在jw.data.egg-info/namespace_packages.txt
有“ jw”。 做一个
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中的程序包名称与名称空间加程序包相同。 我将所有包从“ namespace.package x ”重命名为“ namespace-package x ”,并且足够有效。 我用jw.util和jw.data尝试了相同的方法 ,但是这里的技巧不起作用。 而且我真的不相信setup.py中的包名称与它包含的包层次结构有关系吗?
无论如何,有人知道这里发生了什么吗?
似乎是Python中一个众所周知的错误。
但是https://github.com/pypa/setuptools/issues/250中有一个解决方案:
简单地说,附加
;import pkg_resources; pkg_resources.fixup_namespace_packages('')
到site-packages中竞争程序包的-nspkg.pth 模块中的单行。 必须使用分号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.