具有相同顶级名称的不同python包



如果我安装了两个顶级目录级名称相同但包名不同的python包(由setup.py或其他识别方法定义(,会发生冲突还是会合并"名称空间"?

例如,如果我有以下结构:

repo1
mypkg/
__init__.py
compiler/...
setup.cfg -> name=repo1
repo2
mypkg/
__init__.py
runner/...
setup.cfg -> name=repo2

我能在不冲突的情况下安装这两个吗?如果是,我可以这样导入它们吗:

from mypkg.runner import *
from mypkg.compiler import *

默认情况下,python只识别两个包中的一个,其中一个包在会话中覆盖另一个包。

如果在mypkg软件包中的两个init.py文件中都放入以下行,则可以将这些软件包合并在一起。

__path__ = __import__("pkgutil").extend_path(__path__, __name__)

将会发生的情况是,不是用另一个python覆盖一个包,而是将包的内容放入同一个mypkg命名空间中。

但是,请注意,冲突的模块或子包不会自动解决。

因此,如果您在两个mypkg软件包中都创建了runner子软件包,那么将只加载其中一个runner软件包。

相关内容

  • 没有找到相关文章

最新更新