PyCharm运行正常的Flask项目在终端执行报ModuleNotFoundError
问题描述
项目结构如下:
myproject --src -- cache --- cache.py -- storeservice --- upload.py -- esService --- es.py -- ui --- html --- static -- main --- controller.py
在controller.py中使用了导入语句:
from storeservice.upload import Upload
该代码在PyCharm中运行正常,但在终端执行python3 controller.py时,出现错误:
from storeservice.upload import Upload ModuleNotFoundError: No module named 'storeservice'
无需修改代码的解决方法
方法1:临时设置PYTHONPATH环境变量
在终端中先将src目录添加到Python的模块搜索路径,再运行脚本。假设当前处于myproject目录下,执行:
PYTHONPATH=./src python3 src/main/controller.py
如果已经进入src/main目录,则执行:
PYTHONPATH=../ python3 controller.py
方法2:以模块方式运行脚本
在myproject目录下,使用-m参数以模块形式启动脚本,Python会自动识别项目结构:
python3 -m src.main.controller
方法3:永久配置PYTHONPATH
如果需要每次登录EC2终端都能直接运行脚本,可将src目录路径添加到shell配置文件中。以bash为例:
echo 'export PYTHONPATH=/path/to/myproject/src:$PYTHONPATH' >> ~/.bashrc source ~/.bashrc
替换/path/to/myproject为实际的项目路径,之后即可直接运行:
python3 src/main/controller.py
原因说明
PyCharm默认会将项目的src目录标记为Sources Root,自动添加到Python的模块搜索路径中,因此能正常导入模块;而终端默认不会包含该路径,导致找不到storeservice模块。
内容的提问来源于stack exchange,提问作者arpit joshi
相关产品推荐
相关产品推荐

