问题描述
我正在尝试从 werkzeug.utils 导入 secure_filename 并且出现错误。它在我的基本虚拟环境下运行良好。
代码:
# Flask packages
from flask import Flask,render_template,request,session,redirect,flash,send_file
from flask_bootstrap import Bootstrap
from flask_uploads import UploadSet,configure_uploads,IMAGES,DATA,ALL
# Systems
import os
import sys
import json
from werkzeug.utils import secure_filename
错误:
(absa_annotation) C02QM3FSFVH3:ABSA-annotation-tool kwunkeilau$ python3 app.py
Traceback (most recent call last):
File "app.py",line 4,in <module>
from flask_uploads import UploadSet,ALL
File "/Users/kwunkeilau/anaconda3/envs/absa_annotation/lib/python3.7/site-packages/flask_uploads.py",line 26,in <module>
from werkzeug import secure_filename,FileStorage
ImportError: cannot import name 'secure_filename' from 'werkzeug' (/Users/kwunkeilau/anaconda3/envs/absa_annotation/lib/python3.7/site-packages/werkzeug/__init__.py)
解决方法
该异常看起来像 Flask-Uploads
正在尝试 from werkzeug import secure_filename
,根据您自己的代码,它应该是 from werkzeug.utils import secure_filename
。
通过 Flask-Uploads
github 存储库,这似乎是 fixed 12 months ago。
我会在您的虚拟环境中尝试 pip install -U flask-uploads
,以确保最新版本。
编辑:
正如@mattficke 指出的那样,PyPi 版本已经过时,并且 repo 上没有更新的版本。事实证明,您可以根据提交哈希直接安装,因此对于最新版本(在撰写本文时):
pip install git+https://github.com/maxcountryman/flask-uploads.git@f66d7dc
或在 requirements.txt
中:
git+https://github.com/maxcountryman/flask-uploads.git@f66d7dc
然后pip install -r requirements.txt
。
有什么神奇之处:
>>> from flask_uploads import UploadSet,configure_uploads,IMAGES,DATA,ALL
>>> # No Exception
,
作为上述建议的解决方案的替代方案,您可以使用维护良好的叉子 Flask-Reuploaded
。
您甚至不必更改 import 语句,因为它会尝试与不再维护良好的 Flask-Uploads
保持兼容。
见https://github.com/jugmac00/flask-reuploaded
此外,Flask-Reuploaded
当然在 PyPI 上提供了最新的软件包: