控制台运行create_admin_user.py时models模块导入失败的原因及解决
问题原因
PyCharm会自动将项目的src/目录设为源根并添加到Python的模块搜索路径sys.path中,因此能正常导入models模块。但终端直接执行create_admin_user.py时,Python仅将脚本所在的src/scripts/目录加入sys.path,而models所在的src/不在搜索路径内,所以触发ModuleNotFoundError。
另外,你尝试的from ..models import ...属于相对导入,直接运行脚本时Python会将其视为顶层模块,不允许使用相对导入,因此无法生效。
解决方法
方法1:在脚本中手动添加src路径
在create_admin_user.py的最顶部添加以下代码,强制将src/目录加入模块搜索路径:
import sys import os # 获取当前脚本所在目录的上级目录(即src/) src_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(src_path) # 随后正常导入即可 from models import User, Role, Session
方法2:以模块方式运行脚本
切换到包含src/的上级目录,用python -m命令以模块形式运行脚本:
python -m src.scripts.create_admin_user
此时可以使用相对导入,将create_admin_user.py中的导入语句改为:
from ..models import User, Role, Session
注意:这种方式必须通过python -m执行,不能直接运行脚本文件。
方法3:设置PYTHONPATH环境变量
在终端中先将src/目录添加到PYTHONPATH,再执行脚本:
- Linux/macOS:
export PYTHONPATH="/实际路径/src" python src/scripts/create_admin_user.py - Windows(命令提示符):
set PYTHONPATH=C:\实际路径\src python src\scripts\create_admin_user.py - Windows(PowerShell):
$env:PYTHONPATH = "C:\实际路径\src" python src\scripts\create_admin_user.py
内容的提问来源于stack exchange,提问作者Никита Ершов
相关产品推荐
相关产品推荐

