如何避免Flask开发服务器监测非项目文件导致的异常自动重载
解决Flask调试模式误监测第三方包文件频繁重载的方案
你遇到的问题是Flask 1.1.2依赖的Werkzeug 1.0.1版本内置重载器的默认逻辑导致的:该版本重载器会默认监测所有被项目导入的模块文件,包括site-packages目录下的第三方包,当第三方包有缓存写入、后台文件变更时就会触发误重载。
方法1:代码内配置重载器排除规则(推荐,无需升级依赖)
在你的main.py启动代码中添加重载器排除规则,直接忽略所有site-packages目录下的文件变更,修改后代码如下:
import os from flask import Flask app = Flask(__name__) if __name__ == '__main__': app.run( debug=True, port=7000, # 配置重载器排除规则 reloader_excludes=[ # 通配符匹配所有site-packages目录下的文件 "*/site-packages/*" ] )
如果上述参数不生效,可以在代码最开头提前设置Werkzeug的环境变量:
import os # 全局设置重载器排除site-packages路径,需放在导入flask之前 os.environ["WERKZEUG_RUN_RELOADER_EXCLUDES"] = "*/site-packages/*" from flask import Flask # 后续代码保持不变 app = Flask(__name__) if __name__ == '__main__': app.run(debug=True, port=7000)
方法2:更换重载器类型
你当前使用的windowsapi reloader在部分Windows环境下会出现文件变更误判问题,可以手动指定使用stat类型重载器:
if __name__ == '__main__': app.run( debug=True, port=7000, reloader_type='stat' )
方法3:升级Flask和Werkzeug版本
2.0及以上版本的Flask已经优化了重载逻辑,默认不会监测site-packages目录下的第三方包文件,你可以执行以下命令升级到兼容Python3.9的稳定版本:
pip install -U flask==2.0.3 werkzeug==2.0.3
升级完成后无需修改原有启动代码即可生效。
临时验证方案
如果不想修改代码,可以在启动应用前先在cmd窗口执行环境变量设置命令:
set WERKZEUG_RUN_RELOADER_EXCLUDES=*/site-packages/* py main.py
该配置仅在当前cmd窗口生效,关闭窗口后配置失效。
内容的提问来源于stack exchange,提问作者Parvat R
相关产品推荐
相关产品推荐

