Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.2K
Vistas
ImportError: no se puede importar el nombre 'safe_str_cmp' de 'werkzeug.security'

¿Alguna idea de por qué me sale este error?

Mi proyecto estaba funcionando bien. Lo copié en una unidad externa y en mi computadora portátil para trabajar en el camino; funcionó bien Lo volví a copiar en mi escritorio y tuve muchos problemas con intérpretes no válidos, etc., así que hice un nuevo proyecto y copié solo los scripts, hice un nuevo requirements.txt e instalé todos los paquetes, pero cuando lo ejecuto, obtener este error:

 Traceback (most recent call last): File "E:\Dev\spot_new\flask_blog\run.py", line 1, in <module> from flaskblog import app File "E:\Dev\spot_new\flask_blog\flaskblog\__init__.py", line 3, in <module> from flask_bcrypt import Bcrypt File "E:\Dev\spot_new\venv\lib\site-packages\flask_bcrypt.py", line 21, in <module> from werkzeug.security import safe_str_cmp ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security' (E:\Dev\spot_new\venv\lib\site-packages\werkzeug\security.py)

Intenté desinstalar Python, Anaconda, PyCharm, eliminé todas las claves de registro y las variables de entorno que pude encontrar que parecen pitónicas, reinstalé todo desde cero pero aún no tuve suerte.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Werkzeug lanzó hoy v2.1.0 , eliminando werkzeug.security.safe_str_cmp .

Probablemente pueda resolver este problema fijando Werkzeug~=2.0.0 en su archivo requirements.txt (o similar).

 pip install Werkzeug==2.0.0

Después de eso, es probable que también tenga un AttributeError relacionado con el paquete jinja, así que si lo tiene, ejecute:

 pip install jinja2==3.0.3
over 4 years ago · Santiago Trujillo Denunciar

0

Las notas de la versión de Werkzeug 2.1.0 recomiendan usar el equivalente hmap . Como referencia, aquí está la implementación de safe_str_cmp de wekzeug 2.0.x, y aquí hay una versión simplificada:

 import hmac def safe_str_cmp(a: str, b: str) -> bool: """This function compares strings in somewhat constant time. This requires that the length of at least one string is known in advance. Returns `True` if the two strings are equal, or `False` if they are not. """ if isinstance(a, str): a = a.encode("utf-8") # type: ignore if isinstance(b, str): b = b.encode("utf-8") # type: ignore return hmac.compare_digest(a, b)

o incluso uno más simplificado:

 import hmac str_to_bytes = lambda s: s.encode("utf-8") if isinstance(s, str) else s safe_str_cmp = lambda a, b: hmac.compare_digest(str_to_bytes(a), str_to_bytes(b))
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda