Упаковка общих пространств имен 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'],
...
Ответы
Ответ 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']
...
)
Справочная документация: пакеты пространства имен.