0
我有一個奇怪的問題,即我無法單獨再現,但它顯示在生產代碼中,當然生產代碼不能公開共享。無法從相同名稱空間樹中的包導入,直到導入pkg_resources
我有兩個包,出於參數的緣故ns.server
和ns.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。我只想了解發生了什麼。