在 PYTHONPATH 元素的顶部导入两个具有相同名称的模块

Import two modules with same name at top of PYTHONPATH elements

我会缩短符号。我有

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

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

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

我在 SO 和其他地方搜索了现有问题;我找到的所有答案都取决于一些我没有的包 "handle"。

此导入语句不正确:

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.utils 来自顶级包 utils.

namespaced