2016-09-14 30 views
0

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

回答

0

呃,第二個問題我在很多天自我回答。我有一個陳舊的egg-info目錄,位於lib/python2.7/site-packages周圍,從之前的安裝中我偶然忽略了將-e(開發模式)傳遞給pip。徹底清除一切並重新安裝固定它。