ImportError: Kein Modul namens Crypto.Cipher


120

Wenn ich versuche, app.py (Python 3.3, PyCrypto 2.6) auszuführen, gibt meine virtuelle Umgebung immer wieder den oben aufgeführten Fehler zurück. Meine Importanweisung ist gerecht from Crypto.Cipher import AES. Ich habe nach Duplikaten gesucht und man könnte sagen, dass es einige gibt, aber ich habe die Lösungen ausprobiert (obwohl die meisten nicht einmal Lösungen sind) und nichts hat funktioniert.

Unten sehen Sie, wie die Dateien für PyCrypto aussehen:


5
Sieht aus wie Sie in einer virtuellen Umgebung sind. Ist Ihre virtuelle Umgebung ordnungsgemäß aktiviert?
Christian Ternus

@ChristianTernus Es ist richtig aktiviert.
Graham Smith

Ich hatte das gleiche Problem. Das klingt ein bisschen lahm, aber um es zu beheben, habe ich OSX nicht mehr verwendet, VirtualBox und eine Linux-Distribution installiert und alles hat funktioniert :)
Jordanien

1
Warte was? ImportErrorwird in angezeigt, python 2während python 3es ist ModuleNotFoundError.
Black Thunder

@ BlackThunder, python3 -c 'import foo'ergibt ImportError: No module named 'foo'. Habe ich etwas verpasst?
R2evans

Antworten:


62

Ich hatte das gleiche Problem (allerdings unter Linux). Die Lösung war ganz einfach - hinzufügen:

libraries:
- name: pycrypto
  version: "2.6"

zu meiner app.yamlDatei. Da dies in der Vergangenheit korrekt funktioniert hat, gehe ich davon aus, dass dies eine neue Anforderung ist.


1
Um noch ein bisschen mehr hinzuzufügen, in meinem Fall funktionierte dies nicht, da ich mehrere Versionen von Python-Interpreten auf meinem Computer hatte und die Bibliotheken in verschiedenen Versionen installierte. Was ich getan habe, wurde in die virtuelle Umgebung verschoben und es funktionierte so glatt wie Seide.
NeaGaze

@neaGaze Wie sind Sie "in die virtuelle Umgebung gezogen", damit sie "glatt wie Seide" funktioniert?
Praxiteles

1
@Praxiteles Nun, es ist schon eine Weile her, seit ich dieses Projekt gemacht habe, aber ich glaube, ich habe die virtuelle Python-Umgebung verwendet. In Python können Sie entweder eine eigenständige Version oder die virtuelle Umgebung verwenden. Sie können diesen Link überprüfen, wenn Sie weitere Informationen benötigen pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze

7
Diese Antwort erklärt nicht alles. Woher bekommen Sie die app.yamlDatei?
Vishrant

3
Du solltest nicht mehr benutzen pycrypto! Überprüfen Sie meine Antwort für eine bessere Lösung!
Winklerrr

195

Ich hatte das gleiche Problem auf meinem Mac bei der Installation mit pip. Ich habe es dann entfernt pycryptound erneut installiert mit easy_install:

pip uninstall pycrypto
easy_install pycrypto

auch als Luke kommentierte: Wenn Sie Probleme beim Ausführen dieser Befehle haben, stellen Sie sicher, dass Sie sie als admin (sudo) ausführen.

Hoffe das hilft!

EDIT: Wie winklerr oben richtig bemerkt, ist pycrypto nicht mehr sicher. Verwenden Sie stattdessen pycryptodome, es ist ein Drop-In-Ersatz


4
Es ist seltsam, aber dies hat das Problem bei OS X Mavericks für mich behoben. Ich brauchte Sudo für systemweite Bibliotheken.
Paul

2
danke elad, ich benutze 10.9.3 und ich habe den gleichen fehler bekommen. danke eine Million
Özgür Fırat Özpolat

4
Ich hatte es mit pip installiert, was nicht funktionierte, dann easy_install, was auch nicht funktionierte. (Dies ist unter Windows.) Wenn Sie es einfach mit pip deinstallieren, wie Sie vorgeschlagen haben, funktioniert es irgendwie. Ich hätte in einer Million Jahren nie daran gedacht. Danke dir.
user124384

6
Dies spart immer noch den Tag auf El Capitan.
Nichtsein

2
Kann jemand erklären, warum das funktioniert? (unter OSX 10.11.4 mit Python von Homebrew)
Gabe Kopley

102

Ich bin auch auf dem Mac darauf gestoßen, und es scheint damit zu tun zu haben, dass neben pycrypto via pip ein leider ähnlich benanntes "Crypto" -Modul (nicht sicher, wofür das ist) neben pycrypto installiert wurde.

Das Update scheint darin zu bestehen, sowohl Crypto als auch Pycrypto mit pip zu entfernen:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

und Neuinstallation von pycrypto:

sudo pip install pycrypto

Jetzt funktioniert es wie erwartet, wenn ich so etwas mache wie:

from Crypto.Cipher import AES

Gleiches gilt für mich in Windows + Vagrant mit Ubuntu 14.04 64-Bit und Python3
Juha Untinen

Dies funktioniert mit der Ausnahme, dass in einer virtuellen Umgebung kein Sudo verwendet wird
Michael Robellard

31

Auf dem Mac ... wenn Sie darauf stoßen ... versuchen Sie zu sehen, ob Sie stattdessen Krypto importieren können?

Wenn ja .. der Paketname ist das Problem Cvs c. Um dies zu umgehen, fügen Sie diese Zeilen einfach oben in Ihr Skript ein.

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

Sie wissen, dass Sie paramiko erfolgreich importieren können sollten.


Das ist nicht richtig, lesen Sie hier ein bisschen: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev

Toll! Vielen Dank!!! ;)
Victor VosMottor bedankt sich bei Monica


21

Ich habe die Lösung gefunden. Das Problem liegt wahrscheinlich in der Groß- und Kleinschreibung (unter Windows).

Ändern Sie einfach den Namen des Ordners:

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

So wurde der Ordner nach der Installation von pycrypto benannt: Geben Sie hier die Bildbeschreibung ein

Ich habe es geändert in: Geben Sie hier die Bildbeschreibung ein

Und jetzt funktioniert der folgende Code einwandfrei: Geben Sie hier die Bildbeschreibung ein


Dies funktioniert, aber es gibt zu viele Pakete in allen, die umbenannt werden müssen.
user1288329


20

WARNUNG: Nicht mehr verwenden pycrypto!

Wie Sie auf lesen dieser Seite , von der Nutzung pycryptoist nicht mehr sicher:

Pycrypto ist anfällig für einen Heap-basierten Pufferüberlauf in der ALGnew-Funktion in block_templace.c. Es ermöglicht Remoteangreifern, beliebigen Code in der Python-Anwendung auszuführen. Es wurde die CVE-2013-7459- Nummer zugewiesen .

Pycrypto hat keine Korrektur für diese Sicherheitsanfälligkeit veröffentlicht und seit dem 20. Juni 2014 wurde kein Commit für das Projekt vorgenommen.

LÖSUNG: Verwenden Sie Python3 und pycryptodome!

TL; DR: pip3 install pycryptodome

Stellen Sie sicher, dass Sie andere Versionen von cryptooder pycryptozuerst deinstallieren .

Einrichten einer neuen virtuellen Umgebung

Verwenden Sie die folgenden Befehle, um eine virtuelle Umgebung zu installieren und alles einzurichten:

# 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

Weitere Informationen finden Sie unter pycryptodome.org


1
Wenn Sie derzeit Crypto oder Pycrypto installiert haben, müssen Sie diese zuerst deinstallieren.
Gino Mempin

8

Wenn Sie Redhat, Fedora, Centos verwenden:

sudo yum install pycrypto

Für meinen Fall konnte ich es nicht mit pip installieren


Dieser Paketname, auf den verwiesen wird, scheint auf yum nicht mehr zu existieren? "pycrypto"
k1DBLITZ

8

Ich hatte das gleiche Problem 'ImportError: No module named Crypto.Cipher' , seit ich GoogleAppEngineLauncher (Version> 1.8.X) mit GAE Boilerplate unter OSX 10.8.5 (Mountain Lion) verwendet habe. In Google App Engine SDK mit Python 2.7-Laufzeit ist pyCrypto 2.6 die vorgeschlagene Version. Die Lösung, die für mich funktioniert hat, war ...

1) Laden Sie die pycrypto2.6-Quelle herunter und extrahieren Sie sie irgendwo (~/Downloads/pycrypto26 )

Beispiel: Git-Klon https://github.com/dlitz/pycrypto.git

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

3) Führen Sie den folgenden Terminalbefehl im vorherigen Ordner aus, um pyCrypto 2.6 manuell im GAE-Ordner zu installieren.

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

1
Die Frage des OP hat mit Windows und nicht mit OSX zu tun
gldraphael

Es kann nützlich sein zu beachten, dass die Installation im Projektstamm auch funktioniert (unabhängig von der Plattform)
ocodo

Es ist eine großartige Antwort für Yosemite-Benutzer!
KyungHoon Kim

@ Lazaros Dinakis: Dies ist die Lösung, die funktioniert hat. Von allen auf dieser Seite genannten Lösungen. Danke
gaurav414u

Diese Antwort löste es für mich auf Mac OSX Yosemite 10.10.5. Das einzige ist, dass die Installation für mich mit Fehlern fehlgeschlagen ist. Also habe ich die Crypto-Bibliothek manuell von meiner Python-Bibliothek in die google_appengine-Bibliothek kopiert. und jetzt funktioniert es.
Boaz Saragossi

7

Wenn Sie ein Macos sind, benennen Sie den lib-Ordner lib/python3.7/site-packages/cryptoin umlib/python3.7/site-packages/Crypto


Dieser funktionierte für mich im Gegensatz zu anderen Lösungen. Ich bin auf MacOs
user3527975

Hier ist die Lösung begraben, die für mich (unter Windows 10) funktioniert hat
Joseph



3

Arbeitete für mich (Ubuntu 17.10)

Venv entfernen und mit Python v3.6 erneut erstellen

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

Pycrypto ist veraltet, hatte Probleme damit, verwendet Pycryptodome


2

Ich löse dieses Problem, indem ich den Großbuchstaben in Großbuchstaben ändere. Stellen Sie sicher, dass '' aus Crypto.Cipher AES importiert '' nicht aus Crypto.Cipher importiert AES ''.


2

Für CentOS 7.4 habe ich zuerst pip und dann pycrypto mit pip installiert:

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

2

Bisher habe ich das gleiche Problem beim Importieren, from Crypto.Cipher import AESauch wenn ich pycrypto einige Male installiert / neu installiert habe. Am Ende liegt es daran, dass pip standardmäßig python3 verwendet.

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

Die Installation von pycrypto mit pip2 sollte dieses Problem beheben.


1

Für Windows 7:

Ich habe diesen Fehler "Modulfehler Crypo.Cipher Import AES" erhalten

So installieren Sie Pycrypto unter Windows:

Versuchen Sie dies in der Eingabeaufforderung,

Setze path = C: \ Python27 \ Scripts (dh Pfad, in dem sich easy_install befindet)

Führen Sie dann Folgendes aus:

easy_install pycrypto

Für Ubuntu:

Versuche dies,

Laden Sie Pycrypto von " https://pypi.python.org/pypi/pycrypto " herunter "

Ändern Sie dann Ihren aktuellen Pfad mithilfe Ihres Terminals in den heruntergeladenen Pfad:

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

Führen Sie dann mit dem Terminal Folgendes aus:

python setup.py installieren

Es hat bei mir funktioniert. Hoffnung funktioniert für alle ..



1

Vielleicht sollten Sie dies tun: pycryptodome == 3.6.1 fügen Sie es zu den Anforderungen.txt hinzu und installieren Sie es, wodurch der Fehlerbericht entfernt werden sollte. Für mich geht das!



1

Nun, das mag seltsam erscheinen, aber nach der Installation pycryptooder pycryptodomemüssen wir den Verzeichnisnamen cryptoauf Cryptoin aktualisierenlib/site-packages

Referenz


0

Ich bin mit 3.7. Das Problem bleibt bestehen, nachdem ich versucht habe, Krypto zu installieren. Und Pycrypto schlägt in meinem Fall einfach fehl. Am Ende wurde mein Build über das folgende Paket übergeben: pip install pycryptodome

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.