упаковка общих пространств имен Python - PullRequest
15 голосов
/ 21 февраля 2011

Я собираюсь упаковать и загрузить мою библиотеку в PyPI в ближайшие несколько дней, но я немного не уверен в своем подходе к пространству имен.

У меня есть несколько не связанных между собой проектовс похожим подходом и хотел дать им все то же пространство имен.Например:

  • Пространство имен библиотеки 1: abc.seo
  • Пространство имен библиотеки 2: abc.ajax
  • Пространство имен библиотеки 3: abc.ecommerce
  • etc

Проблема в том, что я не уверен, возможно ли сосуществование двух отдельных пакетов (например, яиц) с одним и тем же родительским пространством имен.Этот подход проблематичен, или есть ли способ обойти это?Какой самый лучший подход?

Библиотеки не должны быть упакованы вместе, они слишком не связаны.Я хотел бы получить его прямо перед загрузкой, чтобы избежать болезненных изменений пространства имен после создания "официального" релиза.

(NB abc - не настоящее имя, я хотел, чтобы мой вопрос былбез рекламы)

ОБНОВЛЕНИЕ

Я пошел со следующим, чтобы быть милым людям без установленных setuptools:

try:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    __path__ = __import__('pkgutil').extend_path(__path__, __name__)

Со следующим в setup.py:

setup(
    ...
    namespace_packages = ['rollyourown'],
    ...

1 Ответ

15 голосов
/ 21 февраля 2011

В каждом базовом каталоге проекта создайте следующую структуру:

/setup.py
/abc/__init__.py
/abc/seo/

/abc/__init__.py содержит:

__import__('pkg_resources').declare_namespace(__name__)

setup.py содержит:

setup(...,
    packages: ['abc', 'abc.seo'],
    namespace_packages = ['abc']
    ...
)

Справочная документация: пакеты пространства имен .

...