有没有办法使用带有“imp”的绝对/相对路径在同一目录中导入具有依赖项的模块?
以下是目录结构:
.
├── importFrom
│ ├── dependant.py
│ └── dependence.py
└── test.py
文件test.py使用以下方法导入dependant.py:
modname=imp.load_source("testImp","importFrom/dependant.py")
反过来导入依赖.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
答案 0 :(得分:0)
您需要__init__.py
目录中的importFrom
。
In [5]: ls importFrom/
dependance.py dependant.pyc dependence.pyc __init__.pyc
dependant.py dependence.py __init__.py
In [6]: from importFrom import dependant
In [7]: dependant.dependence
Out[7]: <module 'importFrom.dependence' from 'importFrom/dependence.py'>
我没有在dependant
中导入test
,而是使用Python解释器来显示输出。在dependant.py
中,dependance
已导入。
答案 1 :(得分:0)
IMO对load_source
这是不可行的,它不会做必要的事情,所以你的'dependant.py'文件中的导入会考虑它的父目录。
您应该执行已建议的内容(目录中的__init__.py
和模块中的绝对导入),或使用允许此类事情的较低级别的find_module / load_module函数(请参阅find_module'path'参数)