【问题标题】:cannot import name 'secure_filename' from 'werkzeug'无法从“werkzeug”导入名称“secure_filename”
【发布时间】:2021-04-27 09:56:00
【问题描述】:

我正在尝试从 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,configure_uploads,IMAGES,DATA,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)

【问题讨论】:

    标签: python werkzeug flask-uploads flask-reuploaded


    【解决方案1】:

    根据您自己的代码,该异常看起来像 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
    

    【讨论】:

    • 尽管 Github 中的源代码是活跃的,flask-uploads 包似乎不再发布到 PyPI。最新发布的版本是 2016 年的:pypi.org/project/Flask-Uploads
    • @mattficke 好地方:典型!看起来 github 上的最新标记版本来自 2015 年的 0.2.0,比最新的 pip 版本早。但是我想出了一种基于提交哈希的安装方法,请参阅编辑。
    • 请参阅下面的答案 - 有一个维护良好的分叉 - 无需从 github 安装或操作导入语句。叉子经过更好的测试,修复了几个错误和一个安全问题。并且还提供 PyPI 上的发布。
    【解决方案2】:

    除了上述建议的解决方案之外,您还可以使用维护良好的 fork,称为 Flask-Reuploaded

    您甚至不必更改 import 语句,因为它试图与不再维护良好的 Flask-Uploads 保持兼容。

    https://github.com/jugmac00/flask-reuploaded

    另外,Flask-Reuploaded 当然在 PyPI 上提供了最新的包:

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

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 2020-07-08
      • 2020-05-28
      • 2018-05-21
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 2017-03-06
      相关资源
      最近更新 更多