ImportError: Żaden moduł o nazwie Crypto.Cipher

120

Kiedy próbuję uruchomić app.py (Python 3.3, PyCrypto 2.6) mój virtualenv zwraca błąd wymieniony powyżej. Moje oświadczenie importu jest po prostu from Crypto.Cipher import AES. Szukałem duplikatów i można powiedzieć, że są, ale wypróbowałem rozwiązania (chociaż większość z nich to nie są nawet rozwiązania) i nic nie działało.

Możesz zobaczyć, jak wyglądają pliki PyCrypto poniżej:

Graham Smith
źródło
5
Wygląda na to, że jesteś w virtualenv. Czy twój virtualenv został poprawnie aktywowany?
Christian Ternus
@ChristianTernus Jest aktywowany poprawnie.
Graham Smith
Miałem ten sam problem. To zabrzmi trochę kiepsko, ale aby rozwiązać ten problem, po prostu przestałem używać OSX, zainstalowałem VirtualBox i dystrybucję Linuksa i wszystko działało :)
Jordan
1
Czekaj, co? ImportErrorjest pokazany, python 2gdy jest w python 3nim ModuleNotFoundError.
Black Thunder
@BlackThunder, python3 -c 'import foo'daje ImportError: No module named 'foo'. Przegapiłem coś?
r2evans

Odpowiedzi:

62

Miałem ten sam problem (choć na Linuksie). Rozwiązanie było dość proste - dodaj:

libraries:
- name: pycrypto
  version: "2.6"

do mojego app.yamlpliku. Ponieważ w przeszłości działało to poprawnie, zakładam, że jest to nowy wymóg.

Patrick Jordan
źródło
1
Aby dodać do tego trochę więcej, w moim przypadku to nie działało, ponieważ miałem wiele wersji interpreterów Pythona na moim komputerze i instalowałem biblioteki w różnych wersjach. To, co zrobiłem, zostało przeniesione do wirtualnego środowiska i działało gładko jak jedwab.
neaGaze
@neaGaze Jak „przeniosłeś się do środowiska wirtualnego”, aby działało „gładko jak jedwab”?
Praxiteles,
1
@Praxiteles Cóż, minęło trochę czasu, odkąd wykonałem ten projekt, ale myślę, że korzystałem z ustawienia wirtualnego środowiska env w Pythonie. W Pythonie możesz użyć wersji samodzielnej lub środowiska wirtualnego. Możesz sprawdzić ten link, jeśli potrzebujesz więcej informacji pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze
7
Ta odpowiedź nie wyjaśnia wszystkiego, skąd bierzesz app.yamlplik?
Vishrant
3
Nie powinieneś pycryptojuż więcej używać ! Sprawdź moją odpowiedź, aby uzyskać lepsze rozwiązanie!
winklerrr
196

Miałem ten sam problem na moim Macu podczas instalacji z pip. Następnie usunąłem go pycryptoi zainstalowałem ponownie za pomocą easy_install, na przykład:

pip uninstall pycrypto
easy_install pycrypto

również jak skomentował Luke: Jeśli masz problemy z uruchomieniem tych poleceń, pamiętaj, aby uruchomić je jako admin (sudo)

Mam nadzieję że to pomoże!

EDYCJA: Jak słusznie zauważa winklerr powyżej, pycrypto nie jest już bezpieczne. Zamiast tego użyj pycryptodome, jest to zamiennik typu drop-in

elad srebrny
źródło
4
To dziwne, ale to rozwiązało problem z OS X Mavericks dla mnie. Potrzebowałem sudo do bibliotek systemowych.
Paul
2
dzięki elad, używam 10.9.3 i mam ten sam błąd. miliony dzięki
Özgür Fırat Özpolat
4
Zainstalowałem go za pomocą pip, który nie działał, a następnie easy_install, który również nie działał. (To jest w systemie Windows.) Po prostu odinstalowanie go za pomocą pip, jak sugerowałeś, w jakiś sposób działało. Nigdy bym tego nie pomyślał przez milion lat. Dziękuję Ci.
user124384
6
To wciąż ratuje dzień na El Capitan.
nieistniejący
2
Czy ktoś może wyjaśnić, dlaczego to działa? (na OSX 10.11.4 z
pythonem
102

Natknąłem się na to również na Macu i wydaje się, że jest to związane z posiadaniem niestety podobnie nazwanego modułu "crypto" (nie wiem do czego to służy) zainstalowanego obok pycrypto via pip.

Wydaje się, że poprawka usuwa zarówno krypto, jak i pycrypto za pomocą pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

i ponowna instalacja pycrypto:

sudo pip install pycrypto

Teraz działa zgodnie z oczekiwaniami, gdy robię coś takiego:

from Crypto.Cipher import AES
user42935
źródło
To samo dotyczy mnie w Windows + Vagrant z Ubuntu 14.04 64-bit i Python3
Juha Untinen
To działa, z wyjątkiem tego, że w virtualenv nie używaj sudo
Michael Robellard
31

Na komputerze Mac ... jeśli napotkasz to ... spróbuj sprawdzić, czy możesz zamiast tego zaimportować krypto?

Jeśli tak .. nazwa pakietu jest kwestia Cvs c. Aby obejść ten problem… po prostu dodaj te wiersze na początku skryptu.

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

Wiesz, że powinieneś móc pomyślnie zaimportować paramiko.

pho
źródło
To nieprawda, przeczytaj trochę tutaj: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev
Wspaniały! dzięki!!! ;)
Victor VosMottor dziękuje Monice
24

Odinstalowywanie cryptoi pycryptodziała na mnie. Następnie zainstaluj tylko pycrypto:

pip uninstall crypto 
pip uninstall pycrypto 
pip install pycrypto
tthreetorch
źródło
1
Oto wyjaśnienie tego rozwiązania z dokumentacji: pycryptodome.readthedocs.io/en/latest/src/…
Ilya Orson
23

OSTRZEŻENIE: Nie używaj pycryptojuż!

Jak możesz przeczytać na tej stronie , używanie niepycrypto jest już bezpieczne:

Pycrypto jest podatny na przepełnienie bufora opartego na stercie w funkcji ALGnew w block_templace.c. Umożliwia zdalnym napastnikom wykonanie dowolnego kodu w aplikacji Pythona. Został przypisany CVE-2013-7459 numer.

Pycrypto nie opublikowało żadnej poprawki do tej luki i nie podjęto żadnych zobowiązań w projekcie od 20 czerwca 2014 r.

ROZWIĄZANIE: Użyj Python3 i pycryptodome!

TL; DR: pip3 install pycryptodome

Pamiętaj, aby najpierw odinstalować inne wersje cryptolub pycrypto.

Konfigurowanie nowego środowiska wirtualnego

Aby zainstalować środowisko wirtualne i wszystko skonfigurować, użyj następujących poleceń:

# 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

Aby uzyskać więcej informacji, zobacz pycryptodome.org

winklerrr
źródło
1
Jeśli obecnie masz instalacje krypto lub pycrypto, musisz je najpierw odinstalować.
Gino Mempin
21

Znalazłem rozwiązanie. Problem prawdopodobnie dotyczy rozróżniania wielkości liter (w systemie Windows).

Po prostu zmień nazwę folderu:

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

Tak nazwano folder po instalacji pycrypto: wprowadź opis obrazu tutaj

Zmieniłem to na: wprowadź opis obrazu tutaj

A teraz następujący kod działa dobrze: wprowadź opis obrazu tutaj

damian1baran
źródło
To działa, ale w środku jest zbyt wiele pakietów, wszystkie wymagają zmiany nazwy.
user1288329
8

jeśli używasz redhat, fedora, centos:

sudo yum install pycrypto

w moim przypadku nie mogłem go zainstalować za pomocą pip

hamed
źródło
Wydaje się, że ta nazwa pakietu, do której się odwołuje, już nie istnieje w yum? „pycrypto”
k1DBLITZ
8

Miałem ten sam problem 'ImportError: No module named Crypto.Cipher'od czasu używania GoogleAppEngineLauncher (wersja> 1.8.X) z GAE Boilerplate na OSX 10.8.5 (Mountain Lion). W pakiecie SDK Google App Engine ze środowiskiem wykonawczym Python 2.7 sugerowaną wersją jest pyCrypto 2.6. Rozwiązaniem, które się sprawdziło, było ...

1) Pobierz źródło pycrypto2.6, wypakuj je gdzieś ( ~/Downloads/pycrypto26)

np. klon git https://github.com/dlitz/pycrypto.git

2) cd( cd ~/Downloads/pycrypto26), a następnie

3) Wykonaj następujące polecenie terminala w poprzednim folderze, aby ręcznie zainstalować pyCrypto 2.6 w folderze GAE.

sudo python setup.py install --install-lib /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine
Lazaros Dinakis
źródło
1
pytanie OP dotyczy Windowsa, a nie OSX
gldraphael
Warto zauważyć, że instalacja w katalogu głównym projektu również zadziała (niezależnie od platformy)
ocodo.
To świetna odpowiedź dla użytkownika yosemite!
KyungHoon Kim
@Lazaros Dinakis: To jest rozwiązanie, które zadziałało ... spośród wszystkich rozwiązań wymienionych na tej stronie. Dzięki
gaurav414u
ta odpowiedź rozwiązała to dla mnie w systemie Mac OSX Yosemite 10.10.5. Jedyną rzeczą jest to, że instalacja nie powiodła się z błędami dla mnie. więc ręcznie skopiowałem bibliotekę Crypto z mojej biblioteki Python do biblioteki google_appengine. i teraz działa.
Boaz Saragossi
7

Jeśli jesteś macos, zmień nazwę folderu lib lib/python3.7/site-packages/cryptonalib/python3.7/site-packages/Crypto

Jacek
źródło
Ten działał u mnie w przeciwieństwie do innych rozwiązań. Jestem na
MacOs
Tutaj zakopane jest rozwiązanie, które działało dla mnie (na Windows 10)
Joseph
3

Spróbuj z pip3 :

sudo pip3 install pycrypto
Arthur Araújo
źródło
3

Pracował dla mnie (Ubuntu 17.10)

Usunięcie venv i ponowne utworzenie go za pomocą Pythona 3.6

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

Pycrypto jest przestarzałe, miał z nim problemy, używał Pycryptodome

applekate
źródło
2

Rozwiązuję ten problem, zmieniając wielkość pierwszej litery na dużą. Upewnij się, że „” z Crypto Cipher importuje AES „nie” z crypto Cipher importuje AES „”.

Zesheng LI
źródło
2

Dla CentOS 7.4 najpierw zainstalowałem pip, a następnie pycrypto za pomocą pip:

> sudo yum -y install python-pip 
> sudo python -m pip install pycrypto
stuhpa
źródło
2

Do tej pory mam ten sam problem podczas importowania, from Crypto.Cipher import AESnawet jeśli kilka razy zainstalowałem / ponownie zainstalowałem pycrypto. Skończyło się tak, ponieważ pip domyślnie ustawił python3.

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

instalacja pycrypto z pip2 powinna rozwiązać ten problem.

Ryan
źródło
1

W systemie Windows 7:

Otrzymałem ten błąd „Błąd modułu Crypo.Cipher import AES”

Aby zainstalować Pycrypto w systemie Windows,

Spróbuj tego w wierszu polecenia,

Ustaw ścieżkę = C: \ Python27 \ Scripts (tj. Ścieżkę, w której znajduje się easy_install)

Następnie wykonaj następujące czynności,

easy_install pycrypto

W przypadku Ubuntu:

Spróbuj tego,

Pobierz Pycrypto z „ https://pypi.python.org/pypi/pycrypto

Następnie zmień aktualną ścieżkę na ścieżkę pobierania za pomocą terminala:

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

Następnie wykonaj następujące czynności za pomocą terminala:

python setup.py install

U mnie to zadziałało. Nadzieja działa dla wszystkich.

JayaPrakash
źródło
1

Może powinieneś to zrobić: pycryptodome == 3.6.1 dodaj go do Requirements.txt i zainstaluj, co powinno wyeliminować raport o błędzie. mi to pasuje!

tęsknię za Tobą
źródło
1

To zadziałało dla mnie

pip install pycryptodome==3.4.3
Saad Mirza
źródło
1

Cóż, może się to wydawać dziwne, ale po zainstalowaniu pycryptolub pycryptodomemusimy zaktualizować nazwę katalogu cryptodo Cryptoinlib/site-packages

Odniesienie

AB Abhi
źródło
0

Jestem z 3.7. Problem pozostaje po próbie zainstalowania crypto. A pycrypto po prostu zawodzi w moim przypadku. W końcu moja kompilacja przeszła przez poniższy pakiet: pip install pycryptodome

Quansheng Li
źródło