如何从另一个目录导入.py文件?
我有这样一组文件结构(目录和箭头后的文件):
model -> py_file.py
report -> other_py_file.py
主目录下有一个叫 __init__.py
的文件:
import model
import report
还有一个模型目录:
import py_file
还有一个报告目录:
import other_py_file
现在在 other_py_file
文件中,我想导入 py_file
,但是无论我怎么尝试,都会出现没有这个模块的错误。
我试过这样做:
from model import py_file
然后我又试了:
import py_file
看起来这两个文件夹之间无法互相识别。那我该怎么从其他目录导入文件呢?我需要在 init.py 文件中指定一些额外的导入吗?
2 个回答
25
Python3:
import importlib.machinery
loader = importlib.machinery.SourceFileLoader('report', '/full/path/report/other_py_file.py')
handle = loader.load_module('report')
handle.mainFunction(parameter)
这个方法可以让你在文件夹结构中以任何你想要的方式导入模块(无论是向后还是向前都没关系,我通常使用绝对路径来确保准确无误)。
还有一种更常见的方式来在Python3中导入模块,
import importlib
module = importlib.load_module('folder.filename')
module.function()
感谢 Sebastian 提供了一个类似的答案,适用于Python2:
import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()
81
你可以在程序运行时添加系统路径:
import sys
sys.path.insert(0, 'path/to/your/py_file')
import py_file
这是最简单的方法了。