Python setuptools: __init__.py не вызывает Declare_namespace()

Я пытаюсь установить пакет zope2.zodbbrowser 0.2 ( https://pypi.python.org/pypi/zope2.zodbbrowser/0.2). Сценарий установки завершается с ошибкой:

Namespace package problem: zope2 is a namespace package, but its
__init__.py does not call declare_namespace()! Please fix it.
(See the setuptools manual under "Namespace Packages" for details.)

Соответствующий раздел руководства выглядит следующим образом: https://pythonhosted.org/setuptools/setuptools.html

Тем не менее, я не знаком с внутренностями setuptools и не смог решить проблему с помощью руководства. Как я могу решить эту проблему с пространством имен, чтобы успешно установить пакет?

Для справки, исходный код ~/zodbbrowser/src/zope2.zodbbrowser/zope2/__ init__.py:

# this is a namespace package
try:
    import pkg_resources
    pkg_resources.declare_namespace(__name__)
except ImportError:
    import pkgutil
    __path__ = pkgutil.extend_path(__path__, __name__)

0 ответов

В сообщении об ошибке предлагается использовать declare_namespace() функция, поэтому кажется возможным заставить ее работать таким образом.

Но вам, вероятно, следует использовать неявный пакет пространства имен и удалить __init__.pyцеликом. Пакеты пространств имен обычно не имеют его, потому что они могут конфликтовать с__init__.py из другого пакета пространства имен с такой же древовидностью.

Например, если у вас есть zope2.a пространство имен:

zope2/__ init__.py
zope2/a/__init__.py

И zope2.b пространство имен:

zope2/__ init__.py
zope2/b/__init__.py

Результатом после установки будет:

zope2/__ init__.py <= Setuptools cannot know which file to take
zope2/a/__init__.py
zope2/b/__init__.py

См. Документацию Python:

Все, что требуется для создания пакета собственного пространства имен, - это просто опустить init.py из каталога пакета пространства имен.

https://packaging.python.org/guides/packaging-namespace-packages/

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