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