gpt4 book ai didi

python - 在 PYTHONPATH 元素顶部导入两个同名的模块

转载 作者:行者123 更新时间:2023-12-01 06:58:50 25 4
gpt4 key购买 nike

我会缩短符号。我有

PYTHONPATH=/path1/dir1:/path2/dir2

结构:

/path1/dir1/
README
muggle.py
...
utils/

/path2/dir2/
__init__.py
utils/
__init__.py
pkg2/
__init__.py
mod2.py

dir1 有一个模块 utils,但它本身不是一个包:没有 __init__.py
dir2 有一个模块 utils,并且 确实__init__.py

我的样板代码(在 dir1 成为环境的一部分之前)已从 dir2 的表单导入

from utils.pkg2.mod2 import func2

问题在于我现在正在调整此代码以调用从 dir1 中的 utils 导入的函数;我无法改变这部分环境。

如何使我的代码适用于 dir2/utils 模块?不幸的是,这还需要适应Python 2.6.6及更高版本。

我搜索了有关 SO 和其他地方的现有问题;我找到的所有答案都取决于我没有的某个包“句柄”。

最佳答案

此导入语句不正确:

from utils.pkg2.mod2 import func2

如果它曾经正常工作过,那就依赖于当前工作目录的解析、Python 2.x 中的隐式相对导入或手动修改的 PYTHONPATH/sys.path.

这是 PEP8 所说的导入类型:

Implicit relative imports should never be used and have been removed in Python 3.

那么该怎么办呢? sys.path 应使用顶级目录进行扩充,而不是包内目录,即:

PYTHONPATH=/path1/dir1:/path2

并像这样更改导入:

from dir2.utils.pkg2.mod2 import func2

现在子包dir2.utilsnamespaced来自顶级包utils

关于python - 在 PYTHONPATH 元素顶部导入两个同名的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58718851/

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