Flask调用send_from_directory时报错缺少environ位置参数该如何解决?
错误原因
该错误几乎都是因为导入send_from_directory的来源错误导致的:
- 你错误导入了werkzeug底层的
send_from_directory接口,这个底层接口属于WSGI工具方法,要求必须手动传入environ等WSGI环境参数,所以会提示缺少对应参数。 - Flask框架自带的
send_from_directory是对werkzeug底层接口的封装,会自动获取请求上下文里的environ参数,不需要开发者手动传入。
修复方案
- 调整导入语句,改为从Flask包直接导入
send_from_directory:
from flask import Flask, send_from_directory
- 原有业务代码不需要做任何修改,你的现有调用写法完全符合Flask封装后接口的参数要求:
return send_from_directory(directory=os.path.join(app.root_path, 'files'), path=filename)
补充说明
- 如果你确实需要直接调用werkzeug的底层
send_from_directory接口,需要手动传入请求的environ参数,写法如下(不推荐日常业务使用):
from werkzeug.utils import send_from_directory from flask import request # 调用时手动补充environ参数 return send_from_directory(directory=os.path.join(app.root_path, 'files'), path=filename, environ=request.environ)
- 极少数场景下该错误是Flask版本过低导致的接口不兼容,调整导入后仍报错可执行命令升级Flask到最新稳定版:
pip install -U flask
内容的提问来源于stack exchange,提问作者Danferno
相关产品推荐
相关产品推荐

