Flask 1.1.2与2.2.2版本依赖冲突问题求助
解决Flask依赖兼容问题
错误原因分析
- Flask 2.2.2与flask_script冲突:
flask_script是已停止维护的库(最后更新于2017年),它依赖Flask 1.x中的flask._compat模块,但Flask 2.x已移除该模块,导致ModuleNotFoundError。 - Flask 1.1.2与Jinja2版本冲突:Jinja2 3.0+移除了
from jinja2 import escape的导入方式,而Flask 1.1.2仅兼容Jinja2<3.0,若环境中安装了高版本Jinja2则触发ImportError。
修复方案
方案一:升级到兼容Flask 2.x的依赖(推荐)
1. 更新requirements.txt
移除过时的flask_script,升级flask_migrate至支持Flask 2.x的版本:
PyMySQL==1.0.2 cryptography==37.0.4 Flask==2.2.2 flask_sqlalchemy==2.5.1 sqlalchemy<1.4.0 flask_migrate==3.1.0 sqlalchemy_utils==0.38.3
2. 调整manage.py代码
移除flask_script相关逻辑,改用Flask官方CLI:
from flask import Flask from flask_migrate import Migrate from configuration import Configuration from models import database from sqlalchemy_utils import database_exists, create_database app = Flask(__name__) app.config.from_object(Configuration) migrate = Migrate(app, database) if __name__ == '__main__': if not database_exists(Configuration.SQLALCHEMY_DATABASE_URI): create_database(Configuration.SQLALCHEMY_DATABASE_URI)
3. 执行数据库迁移命令
设置环境变量后使用Flask CLI:
- Linux/macOS:
export FLASK_APP=manage.py flask db init - Windows:
set FLASK_APP=manage.py flask db init
方案二:回退到Flask 1.1.2并固定Jinja2版本(不推荐,存在安全隐患)
若必须使用旧版Flask,需在requirements.txt中添加Jinja2版本限制:
PyMySQL==1.0.2 cryptography==37.0.4 Flask==1.1.2 flask_sqlalchemy==2.5.1 sqlalchemy<1.4.0 flask_migrate==2.7.0 flask_script==2.0.6 sqlalchemy_utils==0.38.3 Jinja2<3.0
然后重新安装依赖:
pip install -r requirements.txt
内容的提问来源于stack exchange,提问作者kosingas
相关产品推荐
相关产品推荐

