Подтвердить что ты не робот

Упаковка общих пространств имен python

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

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

  • Библиотечное пространство 1: abc.seo
  • Библиотечное пространство 2: abc.ajax
  • Библиотечное пространство 3: abc.ecommerce
  • и т.д.

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

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

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

UPDATE

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

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

В setup.py указано следующее:

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

Ответ 1

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

/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']
    ...
)

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