У меня возникла проблема с пакетами на основе имен python, и мне интересно, какое хорошее решение.Разработка с Python Namespaced Packages
Моя структура проекта аналогична следующей
project_name/ext/app_ext
То есть проект я работаю. Он имеет зависимости, которые также находятся в одном и том же пространстве имен.
project_name/ext/base_ext
project_name/ext/other_dependency
Я работаю над пакетом имен приложений «app_ext» в приложении django. Тем не менее, у меня возникают проблемы с получением no module named app_ext
.
Я думаю, что это связано с тем, как устанавливаются пакеты с расширением имен (я устанавливаю PIP). Пакеты с именованными именами не устанавливаются с файлами __init__.py
, как это описано в документации по распространению/setuptools, но все они действительно содержат следующие объявления в своих установочных пакетах.
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Теперь на вопрос. Есть ли уловка для работы с пакетом с расширением имен, когда уже установлены некоторые связанные пакеты с именами?
Не могли бы вы включить пустые файлы '__init __ .py' в каталоги пакетов? – JAB
@JAB вы предлагаете ему вручную добавлять файлы '__init __. Py' в имя_проекта и создавать виртуальные каталоги пакетов в пакетах сайтов? –
Если проблема заключается в том, что пакеты не признаются таковыми, то это должно работать, правильно? Поскольку '__init __. Py' фактически не должен содержать ничего, чтобы выполнять свою работу в качестве индикатора, что каталог, содержащий его, представляет собой пакет. Или, возможно, есть что-то, чего я здесь не вижу, учитывая использование термина «пакеты с именами», когда пакеты на самом деле являются пространствами имен для начала. Может ли PIP сделать какую-то магию, которая предотвратила бы добавление файла среди других файлов в установленных пакетах? – JAB