2016-09-14 1 views
0

Ich habe ein seltsames Problem, das ich irgendwie nicht reproduzieren kann, aber es zeigt sich im Produktionscode, und natürlich kann der Produktionscode nicht öffentlich freigegeben werden.Kann nicht aus Paket in der gleichen Namespace-Struktur importieren, bis pkg_resources importiert wurde

Ich habe zwei Pakete, aus Gründen des Arguments ns.server und ns.protobuf, wo letztere protobuf spezifische Erweiterungen für das Projekt implementiert. Beide Pakete richtig die Namespace-Pakete in setup.py erklären, und beide haben die vorformulierten pkg_resources Sachen in __init__.py:

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

Jetzt aus irgendeinem seltsamen Grund, bekomme ich diese:

>>> 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 
>>> 

So scheint es, dass Meine Namespaces sind alle verrückt, bis ich pkg_resources importiere und dann ist es behoben. Es ist nicht so schlimm, die Problemumgehung besteht dann einfach darin, zuerst pkg_resources zu importieren. Ich möchte nur verstehen, was vor sich geht.

Antwort

0

Ugh, zweite Frage, die ich selbst in so vielen Tagen antworte. Ich hatte ein abgestandenes Ei-Info-Verzeichnis, das herum in lib/python2.7/site-packages lag, von einer vorherigen Installation, in der ich versehentlich versäumte, -e (Entwicklungsmodus) zu übergeben. Völlig clearing alles und Neuinstallation behoben.

Verwandte Themen