Mad*_*den 2 python setuptools setup.py python-packaging
如果我安装两个具有相同顶级目录级别名称但不同包名称(由 setup.py 或其他识别方法定义)的 python 包,会发生冲突还是“命名空间”会被合并?
例如,如果我有以下结构:
repo1
mypkg/
__init__.py
compiler/...
setup.cfg -> name=repo1
repo2
mypkg/
__init__.py
runner/...
setup.cfg -> name=repo2
Run Code Online (Sandbox Code Playgroud)
我可以安装这两个而不发生冲突吗?如果是,我可以像这样导入它们吗:
from mypkg.runner import *
from mypkg.compiler import *
Run Code Online (Sandbox Code Playgroud)
默认情况下,python 只会识别两个包之一,其中一个包会在会话中覆盖另一个包。
如果将以下行放入mypkg 包中的两个init .py 文件中,则会将这些包合并在一起。
__path__ = __import__("pkgutil").extend_path(__path__, __name__)
Run Code Online (Sandbox Code Playgroud)
将会发生的情况是,Python 不会用另一个包覆盖一个包,而是将包的内容放入相同的 mypkg 命名空间中。
但请注意,冲突的模块或子包不会自动解决。
因此,如果您在两个 mypkg 包中创建一个运行程序子包,则只会加载其中一个运行程序包。
| 归档时间: |
|
| 查看次数: |
865 次 |
| 最近记录: |