Python:导入具有相同名称的不同模块

Rin*_*ita 4 python python-import

我正在处理一个需要多个同名模块的项目。这是架构的代表性摘录,其中包含__init__.py显示哪些文件夹是模块的文件:

/path1
    /ProjectA
        __init__.py
        /src
            __init__.py
            /ctrl
                __init__.py
                somectrl.py
            ...
/path2
    /ProjectA
        __init__.py
        /src
            __init__.py
            someclass.py
Run Code Online (Sandbox Code Playgroud)

在我的课堂上someclass.py,我想像这样导入somectrl.py

from ProjectA.src.ctrl import somectrl
Run Code Online (Sandbox Code Playgroud)

但是导入失败:它告诉我没有ctrl包。似乎它只是查看ProjectAfrom path2,而完全忽略ProjectAfrom path1!双方path1path2都在我PYTHONPATH。那他们两个都联系不上吗?

有没有干净的方法摆脱这种令人讨厌的情况?

Che*_*ngy 5

一种方法是使用 imp 模块。

import imp
somectrl = imp.load_source("somectrl", "path1/ProjectA/src/ctrl/somectrl.py")
someclass = imp.load_source("someclass", "path2/ProjectA/src/someclass.py")
Run Code Online (Sandbox Code Playgroud)