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/