部署Flask应用至Heroku时:从wsgi.py运行提示converting模块未找到,从app目录main.py运行正常
Fixing "ModuleNotFoundError: No module named 'converting'" When Deploying Flask to Heroku via WSGI.py
我完全懂你现在的困扰——直接在app目录里运行main.py时,Flask应用跑的好好的,但移到根目录用wsgi.py启动准备部署到Heroku时,突然就找不到converting模块了。这本质上是Python模块导入路径的问题,咱们来一步步解决它:
解决方案1:修改main.py里的导入语句
既然converting.py和main.py都在app目录下,你可以把main.py里的导入改成相对导入或者绝对导入:
相对导入(推荐,适合同目录模块)
把main.py里的:
from converting import *
改成:
from .converting import *
这里的.表示当前目录,告诉Python从main.py所在的app目录里找converting模块。
绝对导入
也可以用完整的模块路径导入:
from app.converting import *
这种方式更明确,尤其适合项目结构比较复杂的情况。
解决方案2:修改wsgi.py,添加app目录到Python路径
如果不想改main.py的代码,也可以在wsgi.py里手动把app目录加入Python的搜索路径,让它能找到里面的模块:
修改后的wsgi.py代码:
import sys from pathlib import Path # 把app目录添加到Python的模块搜索路径中 sys.path.append(str(Path(__file__).parent / 'app')) from app.main import app if __name__ == '__main__': app.run()
这样Python运行wsgi.py时,就会把app目录纳入搜索范围,自然能找到converting模块了。
额外提醒:确保Heroku Procfile配置正确
部署到Heroku时,别忘了根目录要有Procfile文件,内容应该是:
web: gunicorn wsgi:app
这会告诉Heroku用gunicorn(生产级WSGI服务器)运行wsgi.py里的app实例。
内容的提问来源于stack exchange,提问作者Rohan Parikh
相关产品推荐
相关产品推荐

