ImportError: Tidak ada modul bernama Crypto.Cipher

120

Ketika saya mencoba menjalankan app.py (Python 3.3, PyCrypto 2.6) virtualenv saya terus menampilkan kesalahan yang tercantum di atas. Pernyataan impor saya adil from Crypto.Cipher import AES. Saya mencari duplikat dan Anda mungkin mengatakan bahwa ada beberapa, tetapi saya mencoba solusinya (meskipun sebagian besar bahkan bukan solusi) dan tidak ada yang berhasil.

Anda dapat melihat seperti apa file PyCrypto di bawah ini:

Graham Smith
sumber
5
Sepertinya Anda berada di virtualenv. Apakah virtualenv Anda diaktifkan dengan benar?
Christian Ternus
@ChristianTernus Ini diaktifkan dengan benar.
Graham Smith
Saya memiliki masalah yang sama. Ini akan terdengar agak timpang tetapi untuk mengatasinya saya berhenti menggunakan OSX, saya menginstal VirtualBox dan distro linux dan semuanya berfungsi :)
Jordan
1
Tunggu apa? ImportErrorditampilkan python 2sementara di python 3dalamnya ModuleNotFoundError.
Black Thunder
@BlackThunder, python3 -c 'import foo'hasil ImportError: No module named 'foo'. Apakah saya melewatkan sesuatu?
r2evans

Jawaban:

62

Saya memiliki masalah yang sama (meskipun di Linux). Solusinya cukup sederhana - tambahkan:

libraries:
- name: pycrypto
  version: "2.6"

ke app.yamlfile saya . Karena ini berfungsi dengan benar di masa lalu, saya menganggap ini adalah persyaratan baru.

Patrick Jordan
sumber
1
Hanya untuk menambahkan ini sedikit lagi, dalam kasus saya ini tidak berfungsi karena saya memiliki beberapa versi penerjemah Python di mesin saya dan saya menginstal perpustakaan dalam versi yang berbeda. Apa yang saya lakukan dipindahkan ke lingkungan virtual dan bekerja sehalus sutra.
neaGaze
@neaGaze Bagaimana Anda "pindah ke lingkungan virtual" agar bekerja "mulus seperti sutra"?
Praxiteles
1
@Praxiteles Yah sudah lama sejak saya melakukan proyek itu tapi saya pikir saya menggunakan pengaturan Python virtual env. Dengan Python, Anda dapat menggunakan versi mandiri atau lingkungan virtual. Anda dapat melihat tautan ini jika Anda memerlukan informasi lebih lanjut pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze
7
Jawaban ini tidak menjelaskan semuanya, dari mana Anda mendapatkan app.yamlfile?
Vishrant
3
Anda seharusnya tidak menggunakan pycryptolagi! Periksa jawaban saya untuk solusi yang lebih baik!
winklerrr
196

Saya mengalami masalah yang sama di Mac saya saat menginstal dengan pip. Saya kemudian menghapus pycryptodan menginstalnya lagi dengan easy_install, seperti ini:

pip uninstall pycrypto
easy_install pycrypto

juga seperti komentar Luke: Jika Anda mengalami masalah dalam menjalankan perintah ini, pastikan untuk menjalankannya sebagai admin (sudo)

Semoga ini membantu!

EDIT: Seperti yang dicatat winklerr dengan benar di atas, pycrypto tidak lagi aman. Gunakan pycryptodome sebagai gantinya, ini adalah pengganti drop-in

elad silver
sumber
4
Aneh, tapi ini memperbaiki masalah di OS X Mavericks untuk saya. Saya membutuhkan sudo untuk system wide libs.
Paul
2
terima kasih elad, saya menggunakan 10.9.3 dan saya mendapat kesalahan yang sama. terima kasih satu juta
Özgür Fırat Özpolat
4
Saya telah menginstalnya dengan pip, yang tidak berfungsi, lalu easy_install, yang juga tidak berfungsi. (Ini di Windows.) Cukup mencopot pemasangannya dengan pip seperti yang Anda sarankan, entah bagaimana, berhasil. Saya tidak akan pernah berpikir untuk melakukan itu dalam sejuta tahun. Terima kasih.
pengguna124384
6
Ini masih menghemat hari di El Capitan.
ketidakberadaan
2
Adakah yang bisa menjelaskan mengapa ini berhasil? (di OSX 10.11.4 dengan python dari homebrew)
Gabe Kopley
102

Saya mengalami ini di Mac juga, dan tampaknya terkait dengan memiliki modul "crypto" yang sayangnya memiliki nama yang sama (tidak yakin untuk apa itu) dipasang bersama pycrypto melalui pip.

Perbaikannya tampaknya menghapus crypto dan pycrypto dengan pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

dan menginstal ulang pycrypto:

sudo pip install pycrypto

Sekarang berfungsi seperti yang diharapkan ketika saya melakukan sesuatu seperti:

from Crypto.Cipher import AES
pengguna42935
sumber
Sama untuk saya di Windows + Vagrant dengan Ubuntu 14.04 64-bit dan Python3
Juha Untinen
Ini berfungsi kecuali bahwa di virtualenv jangan gunakan sudo
Michael Robellard
31

Di mac ... jika Anda mengalami ini .. coba lihat apakah Anda dapat mengimpor crypto?

Jika demikian .. nama paket adalah masalah Cvs c. Untuk menyiasatinya .. cukup tambahkan baris ini ke bagian atas skrip Anda.

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

Anda tahu harus dapat mengimpor paramiko dengan sukses.

pho
sumber
Itu tidak benar, baca sedikit di sini: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev
Bagus! Terima kasih!!! ;)
Victor VosMottor berterima kasih kepada Monica
24

Menghapus instalasi cryptodan pycryptobekerja pada saya. Kemudian instal saja pycrypto:

pip uninstall crypto 
pip uninstall pycrypto 
pip install pycrypto
tthreetorch
sumber
1
Berikut adalah penjelasan untuk solusi ini dari dokumen: pycryptodome.readthedocs.io/en/latest/src/…
Ilya Orson
23

PERINGATAN: Jangan gunakan pycryptolagi!

Seperti yang dapat Anda baca di halaman ini , penggunaan pycryptoini tidak aman lagi:

Pycrypto rentan terhadap buffer overflow berbasis heap dalam fungsi ALGnew di block_templace.c. Ini memungkinkan penyerang jarak jauh untuk mengeksekusi kode arbitrer dalam aplikasi python. Itu diberi nomor CVE-2013-7459 .

Pycrypto tidak merilis perbaikan apa pun untuk kerentanan itu dan tidak ada komitmen yang dibuat untuk proyek tersebut sejak 20 Juni 2014.

SOLUSI: Gunakan Python3 dan pycryptodome!

TL; DR: pip3 install pycryptodome

Pastikan untuk mencopot pemasangan versi lain cryptoatau yang pycryptopertama.

Menyiapkan lingkungan virtual baru

Untuk menginstal lingkungan virtual dan mengatur semuanya, gunakan perintah berikut:

# 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

Untuk informasi lebih lanjut, lihat pycryptodome.org

winklerrr
sumber
1
Jika saat ini Anda memiliki instalasi crypto atau pycrypto, Anda harus menghapusnya terlebih dahulu.
Gino Mempin
21

Saya menemukan solusinya. Masalahnya mungkin karena sensitivitas huruf (pada Windows).

Ubah saja nama foldernya:

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

Beginilah nama folder setelah instalasi pycrypto: masukkan deskripsi gambar di sini

Saya telah mengubahnya menjadi: masukkan deskripsi gambar di sini

Dan sekarang kode berikut berfungsi dengan baik: masukkan deskripsi gambar di sini

damian1baran
sumber
Ini berfungsi, tetapi ada terlalu banyak paket di dalamnya yang perlu diubah namanya.
pengguna1288329
8

jika Anda menggunakan redhat, fedora, centos:

sudo yum install pycrypto

untuk kasus saya, saya tidak dapat menginstalnya menggunakan pip

hamed
sumber
Nama paket yang direferensikan ini sepertinya sudah tidak ada lagi di yum? "pycrypto"
k1DBLITZ
8

Saya memiliki masalah yang sama 'ImportError: No module named Crypto.Cipher' , sejak menggunakan GoogleAppEngineLauncher (versi> 1.8.X) dengan GAE Boilerplate di OSX 10.8.5 (Mountain Lion). Di Google App Engine SDK dengan waktu proses python 2.7, pyCrypto 2.6 adalah versi yang disarankan. Solusi yang berhasil untuk saya adalah ...

1) Unduh sumber pycrypto2.6, ekstrak di suatu tempat (~/Downloads/pycrypto26 )

misalnya, git clone https://github.com/dlitz/pycrypto.git

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

3) Jalankan perintah terminal berikut di dalam folder sebelumnya untuk menginstal pyCrypto 2.6 secara manual di folder GAE.

sudo python setup.py install --install-lib /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine
Lazaros Dinakis
sumber
1
pertanyaan OP ada hubungannya dengan Windows dan bukan OSX
gldraphael
Mungkin berguna untuk dicatat bahwa menginstal ke root proyek juga akan berfungsi (terlepas dari platformnya)
ocodo
Itu jawaban yang bagus untuk pengguna yosemite!
KyungHoon Kim
@Lazaros Dinakis: Ini adalah solusi yang berhasil .. dari semua solusi yang disebutkan di halaman ini. Terima kasih
gaurav414u
jawaban ini menyelesaikannya untuk saya di mac OSX Yosemite 10.10.5. Hanya masalahnya instalasi gagal dengan kesalahan bagi saya. jadi saya secara manual menyalin lib Crypto dari lib python saya ke lib google_appengine. dan sekarang berhasil.
Boaz Saragossi
7

Jika Anda seorang macos, ganti nama folder lib lib/python3.7/site-packages/cryptomenjadilib/python3.7/site-packages/Crypto

Mendongkrak
sumber
Yang ini berhasil untuk saya dibandingkan dengan solusi lain. Saya menggunakan MacOs
pengguna3527975
Terkubur di sini adalah solusi yang berhasil untuk saya (pada Windows 10)
Joseph
3

Coba dengan pip3 :

sudo pip3 install pycrypto
Arthur Araújo
sumber
3

Bekerja untuk saya (Ubuntu 17.10)

Menghapus venv dan membuatnya lagi dengan 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 tidak digunakan lagi, bermasalah, menggunakan Pycryptodome

applekate
sumber
2

Saya mengatasi masalah ini dengan mengubah kasus huruf pertama ke atas. Pastikan '' dari Crypto.Cipher import AES '' bukan '' dari crypto.Cipher import AES ''.

Zesheng LI
sumber
2

Untuk CentOS 7.4 saya pertama kali menginstal pip dan kemudian pycrypto menggunakan pip:

> sudo yum -y install python-pip 
> sudo python -m pip install pycrypto
stuhpa
sumber
2

Sampai saat ini, saya mengalami masalah yang sama ketika mengimpor from Crypto.Cipher import AESbahkan ketika saya telah menginstal / menginstal ulang pycrypto beberapa kali. Akhirnya itu karena pip default ke python3.

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

menginstal pycrypto dengan pip2 seharusnya menyelesaikan masalah ini.

Ryan
sumber
1

Untuk Windows 7:

Saya mengalami kesalahan ini "Kesalahan modul Crypo.Cipher impor AES"

Untuk menginstal Pycrypto di Windows,

Coba ini di Command Prompt,

Set path = C: \ Python27 \ Scripts (yaitu path dimana easy_install berada)

Kemudian jalankan yang berikut ini,

easy_install pycrypto

Untuk Ubuntu:

Coba ini,

Unduh Pycrypto dari " https://pypi.python.org/pypi/pycrypto "

Kemudian ubah jalur Anda saat ini ke jalur unduhan menggunakan terminal Anda:

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

Kemudian jalankan yang berikut ini menggunakan terminal:

python setup.py install

Ini berhasil untuk saya. Harapan bekerja untuk semua ..

JayaPrakash
sumber
1

Mungkin Anda harus begini: pycryptodome == 3.6.1 menambahkannya ke requirement.txt dan menginstal, yang seharusnya menghilangkan laporan kesalahan. itu berhasil untuk saya!

aku merindukanmu
sumber
1

Ini berhasil untuk saya

pip install pycryptodome==3.4.3
Saad Mirza
sumber
1

Ini mungkin tampak aneh tetapi setelah menginstal pycryptoatau pycryptodome, kita perlu memperbarui nama direktori cryptomenjadi Cryptodilib/site-packages

Referensi

AB Abhi
sumber
0

Saya dengan 3.7. Masalah tetap ada setelah saya mencoba menginstal crypto. Dan pycrypto gagal dalam kasus saya. Jadi pada akhirnya build saya melewati paket di bawah ini: pip install pycryptodome

Quansheng Li
sumber