Как правильно настроить пакеты пространства имен, как установленные, так и исходные? - PullRequest
1 голос
/ 08 июля 2019

У меня есть виртуальная среда Python 3.6, в которой (среди прочего) установлены две библиотеки, которые совместно используют общий верхний каталог shared_name. Он не содержит __init__.py. Насколько я понимаю, это должен быть неявный пакет пространства имен ( PEP 420 )

Когда я добавляю к PYTHONPATH исходный модуль, который также использует это имя на верхнем уровне, я не могу найти последний каталог для поиска. Python не находит его, когда обе директории shared_name имеют __init__.py, а также когда нет ни одной из них. Добавление pkgutils.extend() к одному или обоим __init__.py файлам также не помогает.

Структура выглядит следующим образом:

lib/python3.6/site-packages/shared_name/p1
lib/python3.6/site-packages/shared_name/p2
source_package/shared_name/infrastructure.py

Сразу под shared_name нет файла __init__.py. Во время выполнения sys.path включает source_package, но shared_name.__path__ содержит только lib/python3.6/site-packages/shared_name, а не source_package.

Я в растерянности, как я могу отладить его или что может быть не так с ним. Разрешено ли смешивание установленных и исходных пакетов для пакетов пространства имен? (Документация казалась молчаливой по этой теме.) Использование PYTHONVERBOSE мне тоже не помогло. Например, я не понимаю, почему

# destroy shared_name

возникает прежде, чем появятся какие-либо доказательства того, что его судили, не говоря уже о том, чтобы его сопоставили.

...