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


问题内容

有没有一种方法可以使用带有“ imp”的绝对/相对路径在同一目录中导入具有依赖性的模块?

下面是目录结构:

.
├── importFrom
│   ├── dependant.py
│   └── dependence.py
└── test.py

文件test.py使用以下命令导入dependant.py:

modname=imp.load_source("testImp","importFrom/dependant.py")

依次使用以下命令直接导入dependency.py:

import dependence

调用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

最好让load_source将加载模块的路径添加到加载器,以便它自动找到其相对依赖关系。目前,我发现的唯一替代方法是将系统路径添加到test.py中。

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

sys.path.append(os.path.join(os.path.dirname(__file__), 'importFrom'))
import dependant

问题答案:

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

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