如何从另一个目录导入.py文件?

49 投票
2 回答
233842 浏览
提问于 2025-04-18 01:59

我有这样一组文件结构(目录和箭头后的文件):

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

这是最简单的方法了。

撰写回答