Python 2 и 3 совместимые модули пространства имен (с использованием pip)
Как можно построить несколько модулей python, имеющих одно и то же пространство имен, совместимое для Python 2.7+ и 3.3 +?
Позвоните в пространство имен test
. Теперь я хочу иметь два отдельных модуля под названием test.foo
, а другой - test.bar
. Тем не менее, я в настоящее время разрабатываю test.helloworld
, который зависит от обоих, test.foo
и test.bar
. Оба они перечислены в файле requirements.txt
.
В настоящее время модули test.foo
и test.bar
используют решение Python 2 для пакетов пространства имен:
import pkg_resources
pkg_resources.declare_namespace(__name__)
Запуск предлагаемой команды пика для режима разработки pip install -e .
превращается в: ImportError: No module named 'test.helloworld'
при работе test.foo
или test.bar
.
Решение Python 3 для пакетов пространства имен - это пакеты неявного пространства имен, в которых пакет пространства имен не имеет файла __init__.py
. Это, к сожалению, не работает для версий Python 2.
Как я могу создать решение для Python 2 и 3 (что позволяет мне использовать pip install -e .
)? Решение --egg
не работает для меня, поскольку оно уже устарело.
Ответы
Ответ 1
См. ответ в аналогичном вопросе для полных инструкций, которые работают как на python 2, так и на 3.
Короче говоря, setup.py
должно иметь уникальное имя для каждого модуля и общее определение namespace_packages
в дополнение к __init__.py
, объявляющее пространство имен, установленное в namespace_packages
.
Если у вас все еще есть проблемы, отправьте свои setup.py
и __init__.py
для каждого модуля.