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:


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.


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


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

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.


To nieprawda, przeczytaj trochę tutaj: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev

Wspaniały! dzięki!!! ;)
Victor VosMottor dziękuje Monice


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


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


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


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

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


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

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


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 „”.


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

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.


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.



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!



1

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

Odniesienie


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.