Python子目录文件导入上级模块报错:ModuleNotFoundError
解决ModuleNotFoundError: No module named 'models'的问题
我来帮你搞定这个导入问题!出现这个错误的核心原因是Python默认不会将当前脚本的上级目录加入模块搜索路径——你的test_manager.py在test_utils子目录里,而models和database在它的上级目录,Python找不到这些模块完全是正常的逻辑问题,下面给你几个靠谱的解决办法:
方法1:临时修改sys.path(快速救急)
在test_manager.py的最顶部添加几行代码,手动把上级目录加入Python的模块搜索路径:
import sys import os # 获取当前脚本的上级目录路径并加入搜索列表 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 之后再正常导入你的模块 import csv from models import TestQuestions from database import db from main import serendipity_app
这样Python就能定位到上级目录里的models和database模块了。
方法2:使用相对导入(更规范的包内写法)
如果你的整个项目是一个标准Python包,先确保每个目录(包括项目根目录和test_utils)都有__init__.py文件(可以是空文件,用来标识这是一个Python包)。然后修改test_manager.py里的导入语句为相对导入:
import csv from ..models import TestQuestions from ..database import db from ..main import serendipity_app
⚠️ 注意:这种方式下你不能直接运行test_manager.py(直接执行脚本时相对导入会报错),必须从项目根目录作为包来调用它,比如用python -m test_utils.test_manager,或者通过main.py间接调用。
方法3:设置PYTHONPATH环境变量(全局生效)
你可以把项目的根目录添加到PYTHONPATH环境变量里,这样Python会自动搜索这个目录下的所有模块:
- Windows:在命令行执行:
也可以在系统环境变量里永久添加这个路径。set PYTHONPATH=C:\你的项目根目录路径;%PYTHONPATH% - Linux/macOS:在终端执行:
如果要永久生效,把这条命令加到export PYTHONPATH=/你的项目根目录路径:$PYTHONPATH~/.bashrc或~/.zshrc文件里即可。
最后小提醒:建议始终从项目根目录运行main.py,这样配合上面任意一种方法,导入问题就能彻底解决啦。
内容的提问来源于stack exchange,提问作者Kazaka Nelson
相关产品推荐
相关产品推荐

