flask_uploads:导入错误:无法导入名称“secure_filename”

San*_*eau 24 python flask flask-sqlalchemy flask-uploads python-3.6

我想创建一个表单,允许使用烧瓶表单发送带有描述的图片。我尝试使用此视频:https : //www.youtube.com/watch?v=Exf8RbgKmhM

但是我在启动 app.py 时遇到了麻烦:

?  website git:(master) ? python3.6 app.py
Traceback (most recent call last):
  File "app.py", line 10, in <module>
    from flask.ext.uploads import UploadSet, configure_uploads, IMAGES
ModuleNotFoundError: No module named 'flask.ext'
Run Code Online (Sandbox Code Playgroud)

我不得不替换为 flask.ext.uploadsflask_uploads 但现在我得到:

Traceback (most recent call last):
  File "app.py", line 10, in <module>
    from flask_uploads import UploadSet, configure_uploads, IMAGES
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/flask_uploads.py", line 26, in <module>
    from werkzeug import secure_filename, FileStorage
ImportError: cannot import name 'secure_filename'
Run Code Online (Sandbox Code Playgroud)

我的导入和配置如下所示:

from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from flask import Flask, session, render_template, url_for, redirect, flash, request
from wtforms import Form, fields,TextField, StringField, PasswordField, BooleanField,validators
from wtforms.validators import InputRequired, Email, Length, DataRequired
from flask_wtf import FlaskForm
from flask_uploads import UploadSet, configure_uploads, IMAGES
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
Run Code Online (Sandbox Code Playgroud)

我无法解决这个问题,你知道我该怎么办吗?

小智 84

flask_uploads.py

改变

from werkzeug import secure_filename,FileStorage
Run Code Online (Sandbox Code Playgroud)

from werkzeug.utils import secure_filename
from werkzeug.datastructures import  FileStorage
Run Code Online (Sandbox Code Playgroud)


Dan*_*vtz 28

根据这个问题,这是一个与workzeug当前版本1.0.0相关的错误。它已合并但尚未在 pypi 中发布。直到现在知道的解决方法是从降级werkzeug=1.0.0werkzeug==0.16.0

为此,您只需要运行以下命令:

pip install -U Werkzeug==0.16.0
Run Code Online (Sandbox Code Playgroud)

查看来自 werkzeug 的发行说明有一个版本0.16.1,但在错误报告中没有证据表明使用该版本可能有任何帮助。

  • 谢谢您的回答,我这样做了: 成功卸载 Werkzeug-1.0.0 成功安装 Werkzeug-0.16.0 但我仍然得到以 ImportError 结尾的完全相同的错误:无法导入名称 'secure_filename' (2认同)
  • 你可以尝试安装这个库,看看它是否解决:`pip install Flask-Uploads` (2认同)
  • 实际上不要这样做,否则您将坚持使用非常旧且过时的 Werkzeug 版本。请参阅其他答案以获得更好的解决方案。 (2认同)

J.G*_*.G. 14

您正在使用损坏的Flask-Uploads.

不幸的是,包的维护者决定不向 PyPi 发布包的新版本。

您可以将其Flask-Reuploaded用作替代品,从而解决您的问题。

https://pypi.org/project/Flask-Reuploaded/


Hel*_*iel 8

对于 Werkzeug 版本 2.1.2,只需导入secure_filename为:

from werkzeug.utils import secure_filename