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

标签 python python-import python-2.6

我会缩短符号。我有

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/

相关文章:

python - 为什么 sys.exit() 在 Python 的线程内调用时不退出?

Python 脚本不会在 Linux 上创建文本文件

python - 将字符串 'abcde' 拆分为具有单独元素的列表

python - 如何使用子进程从函数返回变量?

python - 如何在 Python 脚本中获得导入类的相同作用域?

python - 导入 python 3 提示参数为 str/bytes

python - 使用python从xml文件中删除两个字符串之间的所有行

python - 如何让 Sphinx 理解 Sage doctests?

python - 如何让 Node Web 客户端与 Heroku 上的 REST API 对话?

Python在包内添加单元测试