如何在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’参数)