Тема пакетов пространства имен кажется немного запутанной для непосвященных, и это не помогает тем, что предыдущие версии Python реализовали это несколькими способами или что много Q & A на StackOverflow датировано. Я ищу решение в Python 3.5
или более поздней.
Сценарий:
Я занимаюсь реорганизацией кучки кода Python в модулях и подмодулях и работаю над тем, чтобы каждый из этих проектов работал независимо друг от друга, сидя в одном и том же пространстве имен.
В конечном итоге мы будем использовать внутренний PyPi-сервер, обслуживающий эти пакеты в нашей внутренней сети и не хотим путать их с внешними (общедоступными) пакетами PyPi.
Пример: У меня есть 2 модуля, и я хотел бы иметь возможность выполнить следующее:
from org.client.client1 import mod1
from org.common import config
Отраженные модули будут разделены как таковые:
Репозиторий 1:
org_client_client1_mod1/
setup.py
mod1/
__init__.py
somefile.py
Репозиторий 2:
org_common_config/
setup.py
config/
__init__.py
someotherfile.py
Мои репозитории Git уже настроены как org_client_client1_mod1
и org_common_config
, поэтому мне просто нужно выполнить настройку на упаковке и __init__.py
файлах, я полагаю.
Вопросы:
# 1
С
__init__.py
, какой из них я должен использовать (если есть)?:from pkgutil import extend_path __path__ = extend_path(__path__, __name__)
Или:
import pkg_resources pkg_resources.declare_namespace(__name__)
# 2
С
setup.py
мне все еще нужно добавить параметрnamespace_modules
, и если да, я бы использовалnamespace_modules=['org.common']
, илиnamespace_modules=['org', 'common']
?
# 3
Могу ли я отказаться от всего вышеизложенного, просто каким-то образом это реализовать? Возможно, что-то более простое или более "питоновое"?