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.