Невозможно импортировать из пакета в том же дереве пространства имен, пока не будет импортирован pkg_resources
У меня странная проблема, которую я почему-то не могу воспроизвести отдельно, но она обнаруживается в рабочем коде, и, конечно, рабочий код не может быть опубликован публично.
У меня есть два пакета, ради аргумента ns.server
а также ns.protobuf
где последний реализует специфичные для protobuf расширения для проекта. Оба пакета должным образом объявляют пакеты пространства имен в setup.py, и у обоих есть шаблон pkg_resources в __init__.py
:
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 ответ
Тьфу, второй вопрос, на который я отвечаю сам за столько дней. У меня был несвежий справочник информации о яйцах, валяющийся в lib/python2.7/site-packages
, из предыдущей установки, где я случайно забыл передать -e (режим разработки) в pip. Полностью очистить все и переустановить исправил.