gpt4 book ai didi

python3 只有一个目录被导入到命名空间包中

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:38 24 4
gpt4 key购买 nike

我是 python 编程新手,正在尝试学习命名空间包。

我在两个目录path1和path2中有命名空间包split_farm,如下所示-

    $ tree .
.
├── path1
│   └── split_farm
│   ├── common.py
│   ├── cow.py
│   ├── __init__.py
│   ├── ox.py
│   └── __pycache__
│   └── __init__.cpython-35.pyc
└── path2
└── split_farm
├── chicken.py
├── __init__.py
├── __pycache__
│   └── __init__.cpython-35.pyc
└── turkey.py

6 directories, 9 files

然后我将 path1 和 path2 扩展为 sys.path,如下所示 -

    $ python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.extend(['path1', 'path2'])
>>> import split_farm
>>> split_farm.__path__
['path1/split_farm']
>>> locals()
{'sys': <module 'sys' (built-in)>, '__name__': '__main__', '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, 'split_farm': <module 'split_farm' from 'path1/split_farm/__init__.py'>, '__builtins__': <module 'builtins' (built-in)>, '__doc__': None}

如上所示,仅导入了“path1/split_farm”,但未导入“path2/split_farm”。

我的代码在 github 上 here

我该如何解决这个问题?

最佳答案

我认为没有一种简单的方法可以完成您正在做的事情。

基本上,Python 通过在 PYTHONPATH 环境变量中包含的每个目录中按顺序查找模块来导入模块。一旦找到匹配项,它就会停在那里。

在本例中,它在 path1 中找到 split_farm,导入它,然后停在那里。它将把 path2 中的 split_farm 视为完全不同的模块,这将被视为命名空间冲突。

使用一大堆自定义导入逻辑并使用加载的模块可以实现这一点,但我不推荐这样做。

更惯用的方法是让两个包在父包中命名不同的东西,或者将它们组合成一个包。

关于python3 只有一个目录被导入到命名空间包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56829700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com