我有一个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
Run Code Online (Sandbox Code Playgroud)
立刻在shared_name
下面没有__init__.py
文件。在运行时,sys.path
包含source_package
,但shared_name.__path__
仅包含lib/python3.6/site-packages/shared_name
,不包含source_package
。
我不知如何调试它或它可能有什么问题。命名空间包是否不允许混合安装和源包?(对我而言,文档对这个主题似乎无语。)使用PYTHONVERBOSE
也无济于事。我不明白为什么
# destroy shared_name
Run Code Online (Sandbox Code Playgroud)
在任何尝试过的证据(更不用说匹配)之前发生。