Ошибка Python/Flask: "ImportError: невозможно импортировать имя _compare_digest"

В 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

Есть вопросы SO и ответы, но они предназначены для OS X/Django. Кто-нибудь видел или разрешал эту проблему для ПК/фляги раньше?

Ответ 1

У вас есть половина изменений, сделанных для issue 21306 (backporting hmac.compare_digest до 2.7).

В вашем модуле hmac есть строки:

from operator import _compare_digest as compare_digest

вверху, но ваш sys.version_info показывает, что вы используете Python 2.7.6; цитируя наш быстрый чат:

Me: следующая простая проверка:

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 и переустановите его, чтобы убедиться, что у вас есть правильный исполняемый файл для стандартных файлов библиотеки.

Ответ 2

Это может произойти, когда вы обновили python, не перестраивая свой virtualenv. В этом случае просто восстановите свой virtualenv.