#python #setuptools #zope #zodb #namespace-package
#python #setuptools #zope #zodb #пространство имен-пакет
Вопрос:
Я пытаюсь установить пакет 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#namespace-packages
Однако я не знаком с внутренними настройками 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__)
Комментарии:
1. вы пробовали устанавливать с помощью pip? Используете ли вы python2.6?
2. Да, я пробовал pip, но он говорит, что требования уже обновлены (без фактической установки пакета). Я использую python 2.7.
3. Этот пакет предназначен для python 2.6. какую ОС вы используете?
4. Есть ли какая-либо возможность запустить его под python 2.7? Моя ОС — Ubuntu 12.04.4 LTS.
5. здесь есть более новый пакет pypi.python.org/pypi/zodbbrowser . Похоже, вам уже нужно установить pip, убедитесь, что вы используете правильный pip для python2.7
Ответ №1:
В сообщении об ошибке говорится, что вам нужно использовать 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/