ImportError: nessun modulo denominato Crypto.Cipher


120

Quando provo a eseguire app.py (Python 3.3, PyCrypto 2.6) il mio virtualenv continua a restituire l'errore sopra elencato. La mia dichiarazione di importazione è giusta from Crypto.Cipher import AES. Ho cercato duplicati e potresti dire che ce ne sono alcuni, ma ho provato le soluzioni (anche se la maggior parte non sono nemmeno soluzioni) e niente ha funzionato.

Puoi vedere come sono i file per PyCrypto di seguito:


5
Sembra che tu sia in un virtualenv. Il tuo virtualenv è attivato correttamente?
Christian Ternus

@ChristianTernus È attivato correttamente.
Graham Smith

Ho avuto lo stesso problema. Suonerà un po 'noioso ma per risolverlo ho smesso di usare OSX, ho installato VirtualBox e una distribuzione Linux e tutto ha funzionato :)
Jordan

1
Aspetta cosa? ImportErrorè mostrato python 2mentre in python 3esso è ModuleNotFoundError.
Black Thunder il

@BlackThunder, python3 -c 'import foo'produce ImportError: No module named 'foo'. Ho dimenticato qualcosa?
r2evans

Risposte:


62

Ho avuto lo stesso problema (anche se su Linux). La soluzione era abbastanza semplice: aggiungi:

libraries:
- name: pycrypto
  version: "2.6"

al mio app.yamlfile. Poiché in passato ha funzionato correttamente, presumo che questo sia un nuovo requisito.


1
Solo per aggiungere qualcosa di più, nel mio caso non funzionava poiché avevo più versioni di interpreti Python sulla mia macchina e stavo installando le librerie in versioni diverse. Quello che ho fatto è stato spostato nell'ambiente virtuale e ha funzionato liscio come la seta.
neaGaze

@neaGaze Come sei "entrato nell'ambiente virtuale" per farlo funzionare "liscio come la seta"?
Prassitele

1
@ Praxiteles E 'passato un po' di tempo da quando ho fatto quel progetto, ma penso di aver usato l'impostazione dell'ambiente virtuale di Python. In Python puoi usare una versione standalone o l'ambiente virtuale. Puoi controllare questo link se hai bisogno di maggiori informazioni pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze

7
Questa risposta non spiega tutto, dove prendi il app.yamlfile?
Vishrant

3
Non dovresti usare pycryptopiù! Controlla la mia risposta per una soluzione migliore!
winklerrr

196

Ho avuto lo stesso problema sul mio Mac durante l'installazione con pip. L'ho quindi rimosso pycryptoe installato di nuovo con easy_install, in questo modo:

pip uninstall pycrypto
easy_install pycrypto

anche come ha commentato Luke: Se hai problemi a eseguire questi comandi, assicurati di eseguirli come admin (sudo)

Spero che questo ti aiuti!

EDIT: Come winklerr osserva correttamente sopra, pycrypto non è più sicuro. Usa invece pycryptodome, è un sostituto immediato


4
È strano, ma questo ha risolto il problema su OS X Mavericks per me. Avevo bisogno di sudo per librerie a livello di sistema.
Paul

2
grazie elad, sto usando 10.9.3 e ho ricevuto lo stesso errore. grazie
mille

4
L'avevo installato con pip, che non funzionava, poi easy_install, anch'esso non funzionante. (Questo è su Windows.) Semplicemente disinstallarlo con pip come hai suggerito in qualche modo lo ha fatto funzionare. Non avrei mai pensato di farlo in un milione di anni. Grazie.
user124384

6
Questo salva ancora la giornata su El Capitan.
nonbeing

2
Qualcuno può spiegare perché funziona? (su OSX 10.11.4 con python da homebrew)
Gabe Kopley

102

Mi sono imbattuto in questo anche su Mac, e sembra essere correlato ad avere un modulo "crypto", purtroppo chiamato in modo simile (non so a cosa serva) installato insieme a pycrypto tramite pip.

La correzione sembra rimuovere sia crypto che pycrypto con pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

e reinstallare pycrypto:

sudo pip install pycrypto

Ora funziona come previsto quando faccio qualcosa come:

from Crypto.Cipher import AES

Lo stesso per me in Windows + Vagrant con Ubuntu 14.04 a 64 bit e Python3
Juha Untinen

Funziona tranne che in un virtualenv non utilizzare sudo
Michael Robellard

31

Sul mac ... se ti imbatti in questo .. prova a vedere se puoi importare invece crypto?

Se è così .. il nome del pacchetto è il problema Crispetto a c. Per aggirare questo problema ... aggiungi queste righe all'inizio del tuo script.

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

Sai, dovresti essere in grado di importare paramiko con successo.


Non è corretto, leggi un po 'qui: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev



23

ATTENZIONE: non utilizzare pycrypto più!

Come puoi leggere in questa pagina , l'utilizzo di nonpycrypto è più sicuro:

Pycrypto è vulnerabile a un overflow del buffer basato su heap nella funzione ALGnew in block_templace.c. Consente agli aggressori remoti di eseguire codice arbitrario nell'applicazione python. È stato assegnato il numero CVE-2013-7459 .

Pycrypto non ha rilasciato alcuna correzione a tale vulnerabilità e non è stato effettuato alcun commit sul progetto dal 20 giugno 2014.

SOLUZIONE: usa Python3 e pycryptodome!

TL; DR: pip3 install pycryptodome

Assicurati di disinstallare prima altre versioni di cryptoo pycrypto.

Creazione di un nuovo ambiente virtuale

Per installare un ambiente virtuale e configurare tutto, utilizza i seguenti comandi:

# 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

Per ulteriori informazioni, vedere pycryptodome.org


1
Se attualmente hai installazioni di crypto o pycrypto, devi prima disinstallarle.
Gino Mempin

21

Ho trovato la soluzione. Il problema è probabilmente dovuto alla distinzione tra maiuscole e minuscole (su Windows).

Basta cambiare il nome della cartella:

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

Ecco come la cartella è stata denominata dopo l'installazione di pycrypto: inserisci qui la descrizione dell'immagine

L'ho cambiato in: inserisci qui la descrizione dell'immagine

E ora il seguente codice funziona bene: inserisci qui la descrizione dell'immagine


Funziona, ma ci sono troppi pacchetti all'interno e tutti devono essere rinominati.
user1288329


8

se stai usando redhat, fedora, centos:

sudo yum install pycrypto

per il mio caso non potrei installarlo usando pip


Questo nome di pacchetto a cui si fa riferimento sembra non esistere più su yum? "pycrypto"
k1DBLITZ

8

Ho avuto lo stesso problema 'ImportError: No module named Crypto.Cipher' , da quando ho utilizzato GoogleAppEngineLauncher (versione> 1.8.X) con GAE Boilerplate su OSX 10.8.5 (Mountain Lion). In Google App Engine SDK con runtime python 2.7, pyCrypto 2.6 è la versione suggerita. La soluzione che ha funzionato per me è stata ...

1) Scarica il sorgente pycrypto2.6 estrailo da qualche parte (~/Downloads/pycrypto26 )

ad esempio, git clone https://github.com/dlitz/pycrypto.git

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

3) Esegui il seguente comando da terminale all'interno della cartella precedente per installare manualmente pyCrypto 2.6 nella cartella GAE.

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

1
la domanda dell'OP ha a che fare con Windows e non con OSX
gldraphael

Potrebbe essere utile notare che anche l'installazione nella root del progetto funzionerà (indipendentemente dalla piattaforma)
ocodo

È un'ottima risposta per gli utenti di yosemite!
KyungHoon Kim

@ Lazaros Dinakis: Questa è la soluzione che ha funzionato .. di tutte le soluzioni menzionate in questa pagina. Grazie
gaurav414u

questa risposta lo ha risolto per me su mac OSX Yosemite 10.10.5. L'unica cosa è che l'installazione non è riuscita con errori per me. quindi ho copiato manualmente la libreria Crypto dalla mia libreria python nella libreria google_appengine. e ora funziona.
Boaz Saragossi

7

Se sei un macos, rinomina la cartella lib lib/python3.7/site-packages/cryptoinlib/python3.7/site-packages/Crypto


Questo ha funzionato per me rispetto ad altre soluzioni. Sono su
MacOs

Sepolta qui c'è la soluzione che ha funzionato per me (su Windows 10)
Joseph



3

Ha funzionato per me (Ubuntu 17.10)

Rimuovere venv e crearlo di nuovo 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 è deprecato, ha avuto problemi con esso, ha utilizzato Pycryptodome


2

Risolvo questo problema cambiando la prima lettera in maiuscolo. Assicurati che '' from Crypto.Cipher import AES '' non '' from crypto.Cipher import AES ''.


2

Per CentOS 7.4 ho prima installato pip e poi pycrypto usando pip:

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

2

Ad oggi, sto from Crypto.Cipher import AESriscontrando lo stesso problema durante l'importazione anche quando ho installato / reinstallato pycrypto alcune volte. Alla fine è perché pip è stato impostato su python3.

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

l'installazione di pycrypto con pip2 dovrebbe risolvere questo problema.


1

Per Windows 7:

Ho ricevuto questo errore "Errore del modulo Crypo.Cipher import AES"

Per installare Pycrypto in Windows,

Prova questo nel prompt dei comandi,

Imposta percorso = C: \ Python27 \ Scripts (ovvero il percorso in cui si trova easy_install)

Quindi eseguire quanto segue,

easy_install pycrypto

Per Ubuntu:

Prova questo,

Scarica Pycrypto da " https://pypi.python.org/pypi/pycrypto "

Quindi cambia il percorso corrente in percorso scaricato utilizzando il tuo terminale:

Ad esempio: root @ xyz-virtual-machine: ~ / pycrypto-2.6.1 #

Quindi eseguire quanto segue utilizzando il terminale:

installazione di python setup.py

Ha funzionato per me. La speranza funziona per tutti ..



1

Forse dovresti farlo: pycryptodome == 3.6.1 aggiungerlo a requirements.txt e installarlo, il che dovrebbe eliminare il rapporto di errore. per me funziona!



1

Beh, questa potrebbe sembrare strano, ma dopo l'installazione pycryptoo pycryptodome, abbiamo bisogno di aggiornare il nome della directory cryptodi Cryptoalib/site-packages

Riferimento


0

Sono con 3.7. Il problema persiste dopo aver provato a installare crypto. E pycrypto fallisce nel mio caso. Quindi alla fine la mia build è passata tramite il pacchetto seguente: pip install pycryptodome

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.