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 для каждого модуля.