10

我有一个 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

发生在任何证据表明它被尝试之前 - 更不用说匹配了 - 根本没有。

4

0 回答 0