У меня есть виртуальная среда 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
возникает прежде, чем появятся какие-либо доказательства того, что его судили, не говоря уже о том, чтобы его сопоставили.