如何在Flask配置文件中设置FLASK_ENV环境变量?
解决Flask配置文件设置FLASK_ENV不生效的问题
我明白你不想每次手动导出环境变量的痛点——个人项目图方便确实没必要拘泥于最佳实践,咱们直接说问题的核心和解决方案:
为什么你的配置文件设置没生效?
关键在于:FLASK_ENV是Flask启动命令(flask run)优先读取的系统环境变量,不是app.config里的配置项。你在flask.cfg里设置FLASK_ENV='development'后,app.config['ENV']能读到值,但flask run启动时根本不会看这个——它只会先查系统环境变量里的FLASK_ENV,默认是production,所以才会启动生产服务器。
两种可行的解决方法
方法1:用自定义启动脚本替代flask run
如果想完全用配置文件管理,你可以写一个简单的启动脚本(比如run.py),手动把配置文件里的环境变量同步到系统环境中,再启动Flask:
from flask import Flask import os app = Flask(__name__) # 加载你的配置文件 app.config.from_pyfile("flask.cfg") # 把配置里的ENV同步到系统环境变量,让Flask启动时能读到 os.environ["FLASK_ENV"] = app.config["ENV"] # 如果需要调试模式,也可以同步FLASK_DEBUG if app.config.get("DEBUG"): os.environ["FLASK_DEBUG"] = "1" if __name__ == "__main__": app.run()
之后直接运行python run.py就行,这样Flask就会根据你配置文件里的ENV启动对应的服务器了。
方法2:把环境变量写到shell配置文件里(更简洁)
如果你还是想用flask run命令,最简单的方式是把环境变量加到你的shell配置文件中,这样每次登录都会自动加载:
- 如果你用bash,编辑
~/.bashrc文件,添加:export FLASK_ENV=development export FLASK_DEBUG=1 # 可选,开启调试模式 - 如果你用zsh,编辑
~/.zshrc,同样加上面的内容。
保存后运行source ~/.bashrc(或source ~/.zshrc),之后再执行flask run就会自动用开发环境启动了。
补充说明
虽然官方不建议在配置文件或代码里硬编码ENV和DEBUG(主要是怕不小心把生产环境的配置提交到版本库),但个人项目完全可以这么玩——毕竟自己的代码自己说了算😉
内容的提问来源于stack exchange,提问作者Mote Zart
相关产品推荐
相关产品推荐

