Django执行自定义命令时遇ModuleNotFoundError问题求助
解决ModuleNotFoundError: No module named 'university'问题
先确认目录结构与必要文件
你的目录结构应该如下:
assessments/ └── university/ ├── models/ │ ├── __init__.py │ ├── University.py │ ├── TeacherDegree.py │ └── Teacher.py └── commands/ ├── __init__.py └── create_university.py
- 确保
models、commands子目录下都存在__init__.py文件(空文件即可),Python依赖这个文件识别目录为可导入的包。 - 如果模型类分别放在
models下的单独文件中,需要在models/__init__.py中导出这些类,示例代码:from .University import University from .TeacherDegree import TeacherDegree from .Teacher import Teacher
三种解决导入报错的方法
方法1:使用相对导入
修改create_university.py中的导入语句为相对路径:
from ..models import University, TeacherDegree, Teacher
注意:这种方式不能直接运行create_university.py(如python create_university.py),需从assessments目录下以模块方式运行:
python -m university.commands.create_university
方法2:手动添加模块搜索路径
在create_university.py的最顶部添加代码,将assessments目录加入Python的模块搜索路径:
import sys import os # 获取当前脚本所在目录,向上两级定位到assessments目录 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../'))) # 之后可正常使用原导入语句 from university.models import University, TeacherDegree, Teacher
修改完成后,直接运行create_university.py即可生效。
方法3:切换工作目录后运行
打开终端,切换到assessments目录下再执行脚本:
cd assessments python university/commands/create_university.py
此时Python会将当前工作目录(assessments)加入搜索路径,自然能找到university包。
内容的提问来源于stack exchange,提问作者Axel
相关产品推荐
相关产品推荐

