我有一个Python 3.6虚拟环境,其中安装了两个共享共同的顶层目录shared_name
的库。它不包含__init__.py
。据我了解,那应该是一个隐式命名空间包(PEP 420)
当我在PYTHONPATH
中添加在顶层也使用该名称的源模块时,则无法找到后一个目录。当两个shared_name
目录都有一个__init__.py
时,或者没有一个目录时,Python找不到它。
将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
发生在任何尝试过的证据之前,更不用说匹配了。