如何使用imp导入具有相同绝对/相对路径的依赖项的模块?

a1a*_*1an 11 python import

有没有办法使用带有"imp"的绝对/相对路径在同一目录中导入具有依赖项的模块?

以下是目录结构:

.
??? importFrom
?   ??? dependant.py
?   ??? dependence.py
??? test.py
Run Code Online (Sandbox Code Playgroud)

文件test.py使用以下方法导入dependant.py:

modname=imp.load_source("testImp","importFrom/dependant.py")
Run Code Online (Sandbox Code Playgroud)

反过来导入依赖.py:

import dependence
Run Code Online (Sandbox Code Playgroud)

调用test.py给出

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    modname=imp.load_source("testImp","importFrom/dependant.py")
  File "importFrom/dependant.py", line 1, in <module>
    import dependence
ImportError: No module named dependence
Run Code Online (Sandbox Code Playgroud)

使load_source将加载模块的路径添加到加载器以使其自动找到其相对依赖关系可能是值得的.现在,我发现的唯一选择是添加到系统路径,放入test.py

编辑:我找到了一个更好的方法来进行相对导入路径,添加文件来获取调用者的绝对路径(独立于当前工作目录)

sys.path.append(os.path.join(os.path.dirname(__file__), 'importFrom'))
import dependant
Run Code Online (Sandbox Code Playgroud)

sth*_*ult 0

IMO 这是不可行的,因为load_source它不执行必要的操作,因此在“dependant.py”文件中导入时会考虑其父目录。

您应该执行建议的操作(__init__.py在目录中并在模块中绝对导入),或者使用允许此类操作的较低级别的 find_module / load_module 函数(请参阅 find_module 'path' 参数)