Python/Flask 错误:“ImportError: 无法导入名称 _compare_digest”

10 投票
2 回答
21212 浏览
提问于 2025-04-29 07:49

在使用Windows的时候,我在跟着这个Flask教程,结果遇到了一个错误:

C:\Users\Gregory Gundersen\Documents\Research\flask-test>python run.py
Traceback (most recent call last):
  File "run.py", line 2, in <module>
    from app import app
  File "C:\Users\Gregory Gundersen\Documents\Research\flask-test\app\__init__.py
", line 1, in <module>
    from flask import Flask
  File "C:\Python27\lib\site-packages\flask\__init__.py", line 21, in <module>
    from .app import Flask, Request, Response
  File "C:\Python27\lib\site-packages\flask\app.py", line 26, in <module>
    from . import json
  File "C:\Python27\lib\site-packages\flask\json.py", line 25, in <module>
    from itsdangerous import json as _json
  File "C:\Python27\lib\site-packages\itsdangerous.py", line 14, in <module>
    import hmac
  File "C:\Python27\lib\hmac.py", line 8, in <module>
    from operator import _compare_digest as compare_digest
ImportError: cannot import name _compare_digest

网上有一些相关的问题和答案,不过那些是针对OS X和Django的。有没有人之前在PC上使用Flask时遇到过这个问题,或者解决过这个问题呢?

暂无标签

2 个回答

4

这种情况可能发生在你更新了Python,但没有重新创建你的虚拟环境。在这种情况下,只需要重新生成你的虚拟环境就可以了。

14

看起来你只做了一半的修改,涉及到21306号问题(把hmac.compare_digest功能移植到2.7版本)

你的hmac模块里有这些代码:

from operator import _compare_digest as compare_digest

在最上面,但你的sys.version_info显示你正在使用的是Python 2.7.6;引用一下我们之前的聊天:

我:下一个简单的检查:

import sys
print(sys.version_info)

你:sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0)

不过,你的hmac版本是针对Python 2.7.7及以上版本的!

你需要重新安装Python;下载2.7.8版本并重新安装,以确保你的标准库文件有正确的可执行文件。

撰写回答