Flask 3.0.0搭配Flask-Babel 2.0.0出现locked_cached_property导入错误求助
解决Flask 3.0.0 + Flask-Babel 2.0.0的ImportError: locked_cached_property问题
问题原因
Flask 3.0.0彻底移除了flask.helpers中的locked_cached_property API,但你使用的Flask-Babel 2.0.0仍在尝试导入这个已被删除的对象,直接导致了导入错误。由于项目要求必须用Flask-Babel<3,不能升级到适配Flask3.0的Flask-Babel 3.x,可通过以下两种方案解决:
方案1:升级Flask-Babel到兼容Flask3.0的2.x版本
Flask-Babel在2.0.1及后续的2.x版本中已经修复了对Flask3.0的适配问题,替换了对locked_cached_property的依赖。执行以下命令更新:
pip install "Flask-Babel>=2.0.1,<3"
方案2:降级Flask到保留该API的版本
如果不想升级Flask-Babel,可以将Flask降级到2.3.x系列(该版本仍保留locked_cached_property),同时配套降级Werkzeug到对应版本:
pip install "Flask~=2.3.0" "Werkzeug~=2.3.0"
额外修正:代码中的配置导入问题
你的app.py里从flask导入的Config是Flask自带的默认配置类,会覆盖你自己在config.py中定义的配置。需要修改导入语句:
# 把from flask import Config, Flask, render_template # 改成 from flask import Flask, render_template from config import Config
修正后的完整app.py:
# app.py #!/usr/bin/env python3 """Basic Flask app""" from flask import Flask, render_template from flask_babel import Babel from config import Config app = Flask(__name__) babel = Babel(app) app.config.from_object(Config) @app.route("/") def home(): """Home page route""" return render_template("1-index.html") if __name__ == "__main__": app.run(debug=True)
内容的提问来源于stack exchange,提问作者Sixtus Agbo
相关产品推荐
相关产品推荐

