在导入pkg_resources之前,无法从相同名称空间树中的包导入

时间:2016-09-14 11:14:35

标签: python python-2.7 pkg-resources

我有一个奇怪的问题,我不能单独重现,但它出现在生产代码中,当然生产代码不能公开共享。

我有两个包,出于参数的缘故ns.serverns.protobuf,后者为项目实现了protobuf特定的扩展。这两个包都在setup.py中正确声明了命名空间包,并且都在__init__.py中包含了样板pkg_resources:

try:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    from pkgutil import extend_path
    __path__ = extend_path(__path__, __name__)

现在出于一些奇怪的原因,我明白了:

>>> import ns.protobuf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named protobuf
>>> import pkg_resources
>>> import ns.protobuf
>>> 

因此,在我导入pkg_resources然后修复之前,我的命名空间似乎都很复杂。这还不错,解决方法就是先导入pkg_resources。我只想了解发生了什么。

1 个答案:

答案 0 :(得分:1)

呃,第二个问题我在很多天里自我回答。我在lib/python2.7/site-packages中有一个陈旧的egg-info目录,从之前的安装中我不小心忽略了将-e(开发模式)传递给pip。完全清除所有内容并重新安装修复它。