Heroku部署Flask应用报错:无法从flask_session导入Session
Flask部署Heroku的依赖问题解决指南
问题回顾
将本地运行正常的Flask网站部署到Heroku时,先遇到ImportError: cannot import name 'Session' from 'flask_session'错误,应用启动失败并触发H10崩溃错误,日志详情:
2023-07-24T02:31:34.494523+00:00 app[web.1]: ImportError: cannot import name 'Session' from 'flask_session' (unknown location) 2023-07-24T02:31:34.494654+00:00 app[web.1]: [2023-07-24 02:31:34 +0000] [8] [INFO] Worker exiting (pid: 8) 2023-07-24T02:31:34.526827+00:00 app[web.1]: [2023-07-24 02:31:34 +0000] [2] [ERROR] Worker (pid:7) exited with code 3 2023-07-24T02:31:34.528740+00:00 app[web.1]: [2023-07-24 02:31:34 +0000] [2] [ERROR] Worker (pid:8) was sent SIGTERM! 2023-07-24T02:31:34.627270+00:00 app[web.1]: [2023-07-24 02:31:34 +0000] [2] [ERROR] Shutting down: Master 2023-07-24T02:31:34.627284+00:00 app[web.1]: [2023-07-24 02:31:34 +0000] [2] [ERROR] Reason: Worker failed to boot. 2023-07-24T02:31:35.098046+00:00 heroku[web.1]: Process exited with status 3 2023-07-24T02:31:35.130639+00:00 heroku[web.1]: State changed from starting to crashed 2023-07-24T02:31:48.794602+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=flasker888-950c07d40a01.herokuapp.com request_id=7d5cb524-3382-4408-b53d-992e3382cb82 fwd="114.181.123.229" dyno= connect= service= status=503 bytes= protocol=https 2023-07-24T02:31:48.979619+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=flasker888-950c07d40a01.herokuapp.com request_id=a74969fb-4dbf-44e0-be3d-a21dd1c2d064 fwd="114.181.123.229" dyno= connect= service= status=503 bytes= protocol=https
通过pip freeze生成完整的requirements.txt解决了flask_session的问题,但现在Heroku无法识别flask-bcrypt。当前requirements.txt内容:
blinker==1.6.2 cachelib==0.10.2 click==8.1.3 colorama==0.4.6 Flask==2.3.2 Flask-Login==0.6.2 Flask-Session==0.5.0 Flask-SQLAlchemy==3.0.5 greenlet==2.0.2 gunicorn==21.1.0 itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.3 numpy==1.25.1 packaging==23.1 pandas==2.0.3 psycopg2==2.9.6 python-dateutil==2.8.2 pytz==2023.3 six==1.16.0 SQLAlchemy==2.0.17 typing_extensions==4.7.1 tzdata==2023.3 Werkzeug==2.3.6
解决步骤
- 确保本地虚拟环境已安装flask-bcrypt:激活虚拟环境后,执行
pip install flask-bcrypt。如果本地没安装这个包,pip freeze不会把它加入requirements.txt,这是Heroku识别不了的核心原因。 - 重新生成requirements.txt:执行
pip freeze > requirements.txt,此时检查文件内容,应该会出现Flask-Bcrypt==x.x.x的条目(x.x.x为实际安装的版本)。 - 提交更新到Heroku:依次执行以下命令
git add requirements.txt git commit -m "添加flask-bcrypt依赖" git push heroku main - 若仍有问题,检查版本兼容性:当前使用的Flask版本是2.3.2,可指定兼容的flask-bcrypt版本,比如在requirements.txt中手动添加
Flask-Bcrypt==1.0.1(该版本适配Flask 2.x系列),再重新提交。
内容的提问来源于stack exchange,提问作者Dragynjump
相关产品推荐
相关产品推荐

