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

问题描述 投票:1回答:1

我将简化符号。我有

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__.pydir2具有模块utils,而does具有__init__.py

我的样板代码(在dir1是环境的一部分之前)已从以下表格的dir2导入

from utils.pkg2.mod2 import func2

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

我该怎么做才能使代码进入dir2/utils模块?不幸的是,这也需要适应Python 2.6.6及更高版本。

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

python python-import python-2.6
1个回答
1
投票

此导入语句不正确:

from utils.pkg2.mod2 import func2

[如果它能正常工作,那就是依靠解析当前工作目录,Python 2.x中的隐式相对导入或手动修改的PYTHONPATH / sys.path

这是PEP8说的导入类型:

隐式相对导入应该never,并且已在Python 3中删除。

那么该怎么做呢? sys.path应该增加顶级目录,而不是内部软件包目录,即:

PYTHONPATH=/path1/dir1:/path2

并像这样更改导入:

from dir2.utils.pkg2.mod2 import func2

现在子包 dir2.utils是顶级包namespaced中的utils

© www.soinside.com 2019 - 2024. All rights reserved.