【问题标题】:Different python packages with the same top level name [duplicate]具有相同顶级名称的不同python包[重复]
【发布时间】:2020-09-03 11:19:53
【问题描述】:

如果我安装了两个具有相同顶级目录级别名称但包名称不同的 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 setuptools setup.py python-packaging


【解决方案1】:

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

如果您在 mypkg 包中的两个 init.py 文件中添加以下行,则将这些包合并在一起。

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

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

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

因此,如果您在两个 mypkg 包中创建运行器子包,则只会加载其中一个运行器包。

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多