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

2024-09-25 02:34:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我将缩短符号。我有

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,但它本身不是一个包:no__init__.py
dir2有一个模块utils__init__.py

我的锅炉板代码(在dir1是环境的一部分之前)从dir2的表单导入

from utils.pkg2.mod2 import func2

问题在于,我现在正在修改这段代码,以调用从utils导入到dir1的函数;我无法更改环境的这一部分。你知道吗

我该怎么做才能使我的代码适用于dir2/utils模块?不幸的是,这也需要适用于python2.6.6和更高版本。你知道吗

我已经在SO和其他地方搜索了现有的问题;我找到的所有答案都依赖于一些我没有的包“句柄”。你知道吗


Tags: 模块代码py环境init符号utils结构
1条回答
网友
1楼 · 发布于 2024-09-25 02:34:17

此导入语句不正确:

from utils.pkg2.mod2 import func2

如果它曾经正常工作过,那就是依赖于使用当前工作目录、python2.x中的隐式相对导入或手动munged 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是顶级包utilsnamespaced。你知道吗

相关问题 更多 >