ImportError: ningún módulo llamado Crypto.Cipher


120

Cuando intento ejecutar app.py (Python 3.3, PyCrypto 2.6), mi virtualenv sigue devolviendo el error mencionado anteriormente. Mi declaración de importación es justa from Crypto.Cipher import AES. Busqué duplicados y se podría decir que hay algunos, pero probé las soluciones (aunque la mayoría ni siquiera son soluciones) y nada funcionó.

Puede ver cómo son los archivos para PyCrypto a continuación:


5
Parece que estás en un virtualenv. ¿Está tu virtualenv activado correctamente?
Christian Ternus

@ChristianTernus Está activado correctamente.
Graham Smith

Tuve el mismo problema. Esto sonará un poco tonto, pero para resolverlo, dejé de usar OSX, instalé VirtualBox y una distribución de Linux y todo funcionó :)
Jordan

1
¿Esperar lo? ImportErrorse muestra en python 2mientras python 3que está ModuleNotFoundError.
Black Thunder

@BlackThunder, python3 -c 'import foo'cede ImportError: No module named 'foo'. ¿Me he perdido algo?
r2evans

Respuestas:


62

Tuve el mismo problema (aunque en Linux). La solución fue bastante simple: agregue:

libraries:
- name: pycrypto
  version: "2.6"

a mi app.yamlarchivo. Dado que esto funcionó correctamente en el pasado, asumo que este es un nuevo requisito.


1
Solo para agregar a esto un poco más, en mi caso esto no funcionaba porque tenía varias versiones de intérpretes de Python en mi máquina y estaba instalando las bibliotecas en diferentes versiones. Lo que hice fue trasladarse al entorno virtual y funcionó tan suave como la seda.
neaGaze

@neaGaze ¿Cómo "pasaste al entorno virtual" para que funcionara "suave como la seda"?
Praxiteles

1
@Praxiteles Bueno, ha pasado un tiempo desde que hice ese proyecto, pero creo que usé la configuración de entorno virtual de Python. En Python puede utilizar una versión independiente o el entorno virtual. Puede consultar este enlace si necesita más información pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze

7
Esta respuesta no explica todo, ¿dónde está obteniendo el app.yamlarchivo?
Vishrant

3
¡No deberías usar pycryptomás! ¡Verifique mi respuesta para una mejor solución!
winklerrr

196

Tuve el mismo problema en mi Mac al instalar con pip. Luego lo eliminé pycryptoy lo instalé nuevamente con easy_install, así:

pip uninstall pycrypto
easy_install pycrypto

también como comentó Luke: Si tiene problemas para ejecutar estos comandos, asegúrese de ejecutarlos como administrador (sudo)

¡Espero que esto ayude!

EDITAR: Como winklerr señala correctamente anteriormente, pycrypto ya no es seguro. Use pycryptodome en su lugar, es un reemplazo directo


4
Es extraño, pero esto solucionó el problema en OS X Mavericks para mí. Necesitaba sudo para bibliotecas de todo el sistema.
Paul

2
gracias elad, estoy usando 10.9.3 y tengo el mismo error. un millón de gracias
Özgür Fırat Özpolat

4
Lo había instalado con pip, que no funcionó, luego easy_install, que tampoco funcionó. (Esto está en Windows). Simplemente desinstalarlo con pip como sugirió de alguna manera lo hizo funcionar. Nunca hubiera pensado en hacer eso en un millón de años. Gracias.
user124384

6
Esto todavía salva el día en El Capitán.
ser

2
¿Alguien puede explicar por qué funciona esto? (en OSX 10.11.4 con python de homebrew)
Gabe Kopley

102

También me encontré con esto en Mac, y parece estar relacionado con tener un módulo "criptográfico" con un nombre similar (no estoy seguro de para qué sirve) instalado junto con pycrypto a través de pip.

La solución parece eliminar tanto el cifrado como el cifrado con pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

y reinstalar pycrypto:

sudo pip install pycrypto

Ahora funciona como se esperaba cuando hago algo como:

from Crypto.Cipher import AES

Lo mismo para mí en Windows + Vagrant con Ubuntu 14.04 de 64 bits y Python3
Juha

Esto funciona excepto que en un virtualenv no use sudo
Michael Robellard

31

En la mac ... si te encuentras con esto ... intenta ver si puedes importar criptografía en su lugar.

Si es así .. el nombre del paquete es el tema Cvs c. Para evitar esto ... simplemente agregue estas líneas en la parte superior de su secuencia de comandos.

import crypto
import sys
sys.modules['Crypto'] = crypto

Debes poder importar paramiko correctamente.


Eso no es correcto, lea un poco aquí: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev

¡Excelente! ¡¡¡Gracias!!! ;)
Victor VosMottor agradece a Monica el


23

ADVERTENCIA: ¡No lo use pycryptomás!

Como puede leer en esta página , el uso de pycryptoya no es seguro:

Pycrypto es vulnerable a un desbordamiento de búfer basado en montón en la función ALGnew en block_templace.c. Permite a los atacantes remotos ejecutar código arbitrario en la aplicación Python. Se le asignó el número CVE-2013-7459 .

Pycrypto no liberó ninguna solución a esa vulnerabilidad y no se realizó ningún compromiso con el proyecto desde el 20 de junio de 2014.

SOLUCIÓN: Utilice Python3 y pycryptodome!

TL; DR: pip3 install pycryptodome

Asegúrese de desinstalar otras versiones de cryptoo pycryptoprimero.

Configuración de un nuevo entorno virtual

Para instalar un entorno virtual y configurar todo, use los siguientes comandos:

# install python3 and pip3
sudo apt update
sudo apt upgrade
sudo apt install python3
sudo apt install python3-pip

# install virtualenv
pip3 install virtualenv

# install and create a virtual environment in your target folder
mkdir target_folder
cd target_folder
python3 -m virtualenv .

# now activate your venv and install pycryptodome
source bin/activate
pip3 install pycryptodome

# check if everything worked: 
# start the interactive python console and import the Crypto module
# when there is no import error then it worked
python
>>> from Crypto.Cipher import AES
>>> exit()

# don't forget to deactivate your venv again
deactivate

Para obtener más información, consulte pycryptodome.org.


1
Si actualmente tiene instalaciones de crypto o pycrypto, primero debe desinstalarlas.
Gino Mempin

21

Encontré la solución. El problema es probablemente la distinción entre mayúsculas y minúsculas (en Windows).

Simplemente cambie el nombre de la carpeta:

  • C:\Python27\Lib\site-packages\crypto
  • a: C:\Python27\Lib\site-packages\Crypto

Así es como se nombró la carpeta después de la instalación de pycrypto: ingrese la descripción de la imagen aquí

Lo he cambiado a: ingrese la descripción de la imagen aquí

Y ahora el siguiente código funciona bien: ingrese la descripción de la imagen aquí


Esto funciona, pero hay demasiados paquetes dentro que necesitan ser renombrados.
user1288329


8

si está usando redhat, fedora, centos:

sudo yum install pycrypto

para mi caso no podría instalarlo usando pip


Este nombre de paquete al que se hace referencia parece que ya no existe en yum? "pycrypto"
k1DBLITZ

8

He tenido el mismo problema 'ImportError: No module named Crypto.Cipher'desde que utilicé GoogleAppEngineLauncher (versión> 1.8.X) con GAE Boilerplate en OSX 10.8.5 (Mountain Lion). En el SDK de Google App Engine con tiempo de ejecución de python 2.7, pyCrypto 2.6 es la versión sugerida. La solución que funcionó para mí fue ...

1) Descargue la fuente de pycrypto2.6, extráigala en algún lugar ( ~/Downloads/pycrypto26)

por ejemplo, clon de git https://github.com/dlitz/pycrypto.git

2) cd( cd ~/Downloads/pycrypto26) luego

3) Ejecute el siguiente comando de terminal dentro de la carpeta anterior para instalar pyCrypto 2.6 manualmente en la carpeta GAE.

sudo python setup.py install --install-lib /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine

1
la pregunta del OP tiene que ver con Windows y no con OSX
gldraphael

Puede ser útil tener en cuenta que la instalación en la raíz del proyecto también funcionará (independientemente de la plataforma)
ocodo

¡Es una gran respuesta para los usuarios de Yosemite!
KyungHoon Kim

@Lazaros Dinakis: Esta es la solución que funcionó ... de todas las soluciones mencionadas en esta página. Gracias
gaurav414u

esta respuesta me lo resolvió en mac OSX Yosemite 10.10.5. Lo único es que la instalación falló con errores para mí. así que copié manualmente la biblioteca Crypto de mi biblioteca python en la biblioteca google_appengine. y ahora funciona.
Boaz Saragossi

7

Si es macos, cambie el nombre de la carpeta lib lib/python3.7/site-packages/cryptoalib/python3.7/site-packages/Crypto


Este funcionó para mí a diferencia de otras soluciones. Estoy en MacOs
user3527975

Enterrada aquí está la solución que funcionó para mí (en Windows 10)
Joseph



3

Funcionó para mí (Ubuntu 17.10)

Eliminando venv y creándolo de nuevo con python v3.6

pip3 install PyJWT
sudo apt-get install build-essential libgmp3-dev python3-dev
pip3 install cryptography
pip3 install pycryptodome
pip3 install pycryptodomex

Pycrypto está en desuso, tuvo problemas con él, usó Pycryptodome


2

Resuelvo este problema cambiando la primera letra a mayúscula. Asegúrese de que '' de Crypto.Cipher importe AES '' no '' de crypto.Cipher importe AES ''.


2

Para CentOS 7.4, primero instalé pip y luego pycrypto usando pip:

> sudo yum -y install python-pip 
> sudo python -m pip install pycrypto

2

Hasta la fecha, tengo el mismo problema al importar, from Crypto.Cipher import AESincluso cuando instalé / reinstalé pycrypto varias veces. Al final, es porque pip tomó por defecto python3.

~ pip --version
pip 18.0 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

la instalación de pycrypto con pip2 debería resolver este problema.


1

Para Windows 7:

Pasé este error "Error de módulo Crypo.Cipher import AES"

Para instalar Pycrypto en Windows,

Pruebe esto en el símbolo del sistema,

Establecer ruta = C: \ Python27 \ Scripts (es decir, ruta donde se encuentra easy_install)

Luego ejecute lo siguiente,

easy_install pycrypto

Para Ubuntu:

Prueba esto,

Descargue Pycrypto desde " https://pypi.python.org/pypi/pycrypto "

Luego cambie su ruta actual a la ruta descargada usando su terminal:

Por ejemplo: root @ xyz-virtual-machine: ~ / pycrypto-2.6.1 #

Luego ejecute lo siguiente usando la terminal:

instalación de python setup.py

Me ha funcionado. La esperanza funciona para todos ...



1

Tal vez debería hacer esto: pycryptodome == 3.6.1 agregarlo a requirements.txt e instalar, lo que debería eliminar el informe de error. ¡esto funciona para mi!



1

Bueno, esto puede parecer extraño, pero después de instalar pycryptoo pycryptodome, necesitamos actualizar el nombre del directorio cryptoque Cryptoenlib/site-packages

Referencia


0

Estoy con 3.7. El problema persiste después de intentar instalar criptografía. Y pycrypto simplemente falla en mi caso. Entonces, al final, mi compilación pasó a través del paquete a continuación: pip install pycryptodome

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.