Невозможно импортировать из пакета в том же дереве пространства имен, пока не будет импортирован 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. Полностью очистить все и переустановить исправил.

Другие вопросы по тегам