ImportError: Không có mô-đun nào có tên Crypto.Cipher


120

Khi tôi cố gắng chạy app.py (Python 3.3, PyCrypto 2.6) virtualenv của tôi tiếp tục trả về lỗi được liệt kê ở trên. Tuyên bố nhập khẩu của tôi chỉ là from Crypto.Cipher import AES. Tôi đã tìm kiếm các bản sao và bạn có thể nói rằng có một số, nhưng tôi đã thử các giải pháp (mặc dù hầu hết không phải là giải pháp) và không có gì hiệu quả.

Bạn có thể xem các tệp như thế nào đối với PyCrypto bên dưới:


5
Có vẻ như bạn đang ở trong một virtualenv. Virtualenv của bạn đã được kích hoạt đúng cách chưa?
Christian Ternus

@ChristianTernus Nó được kích hoạt đúng cách.
Graham Smith

Tôi gặp vấn đề tương tự. Điều này nghe có vẻ hơi khập khiễng nhưng để giải quyết nó, tôi chỉ cần ngừng sử dụng OSX, tôi đã cài đặt VirtualBox và một bản phân phối Linux và tất cả đều hoạt động :)
Jordan

1
Chờ gì? ImportErrorđược hiển thị trong python 2khi ở trong python 3đó ModuleNotFoundError.
Black Thunder

@BlackThunder, python3 -c 'import foo'lợi nhuận ImportError: No module named 'foo'. Tôi đã bỏ lỡ điều gì đó?
r2evans

Câu trả lời:


62

Tôi đã gặp vấn đề tương tự (mặc dù trên Linux). Giải pháp khá đơn giản - thêm:

libraries:
- name: pycrypto
  version: "2.6"

vào app.yamltệp của tôi . Vì điều này đã hoạt động chính xác trong quá khứ, tôi cho rằng đây là một yêu cầu mới.


1
Chỉ cần thêm vào điều này một chút, trong trường hợp của tôi, điều này không hoạt động vì tôi có nhiều phiên bản trình thông dịch Python trên máy của mình và tôi đang cài đặt các thư viện trong các phiên bản khác nhau. Những gì tôi làm đã được chuyển vào môi trường ảo và nó hoạt động trơn tru như lụa.
neaGaze

@neaGaze Bạn đã "di chuyển vào môi trường ảo" như thế nào để nó hoạt động "mượt mà như lụa"?
Praxiteles

1
@Praxiteles Chà đã lâu kể từ khi tôi thực hiện dự án đó nhưng tôi nghĩ rằng tôi đã sử dụng cài đặt env ảo Python. Trong Python, bạn có thể sử dụng phiên bản độc lập hoặc môi trường ảo. Bạn có thể xem liên kết này nếu bạn cần thêm thông tin pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze

7
Câu trả lời này không giải thích tất cả mọi thứ, bạn đang lấy app.yamlhồ sơ ở đâu?
Vishrant

3
Bạn không nên sử dụng pycryptonữa! Kiểm tra câu trả lời của tôi để có giải pháp tốt hơn!
winklerrr

196

Tôi đã gặp sự cố tương tự trên máy Mac của mình khi cài đặt với pip. Sau đó, tôi đã gỡ bỏ pycryptovà cài đặt lại nó với easy_install, như thế này:

pip uninstall pycrypto
easy_install pycrypto

cũng như Luke đã nhận xét: Nếu bạn gặp sự cố khi chạy các lệnh này, hãy đảm bảo chạy chúng với tư cách quản trị viên (sudo)

Hi vọng điêu nay co ich!

CHỈNH SỬA: Như winklerr đã lưu ý chính xác ở trên, pycrypto không còn an toàn nữa. Sử dụng pycryptodome để thay thế, nó là một sự thay thế thả vào


4
Thật kỳ lạ, nhưng điều này đã khắc phục sự cố trên OS X Mavericks cho tôi. Tôi cần sudo cho libs toàn hệ thống.
Paul

2
cảm ơn elad, tôi đang sử dụng 10.9.3 và tôi gặp lỗi tương tự. cảm ơn một triệu
Özgür Fırat Özpolat

4
Tôi đã cài đặt nó bằng pip, không hoạt động, rồi easy_install, cũng không hoạt động. (Đây là trên Windows.) Chỉ cần gỡ cài đặt nó bằng pip như bạn đã đề xuất bằng cách nào đó làm cho nó hoạt động. Tôi sẽ không bao giờ nghĩ sẽ làm được điều đó trong một triệu năm nữa. Cảm ơn bạn.
user124384

6
Điều này vẫn tiết kiệm trong ngày trên El Capitan.
nonbeing

2
Bất cứ ai có thể giải thích tại sao điều này hoạt động? (trên OSX 10.11.4 với python từ homebrew)
Gabe Kopley

102

Tôi cũng gặp phải vấn đề này trên Mac và có vẻ như nó có liên quan đến việc có một mô-đun "crypto" có tên tương tự không may được cài đặt cùng với pycrypto thông qua pip.

Bản sửa lỗi dường như là loại bỏ cả tiền điện tử và tiền điện tử bằng pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

và cài đặt lại pycrypto:

sudo pip install pycrypto

Bây giờ nó hoạt động như mong đợi khi tôi làm điều gì đó như:

from Crypto.Cipher import AES

Tương tự cho tôi trong Windows + Vagrant với Ubuntu 14.04 64-bit và Python3
Juha Untinen

Công trình này ngoại trừ trong một virtualenv không sử dụng sudo
Michael Robellard

31

Trên mac ... nếu bạn gặp sự cố này .. hãy thử xem liệu bạn có thể nhập tiền điện tử không?

Nếu vậy .. tên gói là vấn đề Cvs c. Để giải quyết vấn đề này .. chỉ cần thêm những dòng này vào đầu tập lệnh của bạn.

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

Bạn biết sẽ có thể nhập paramiko thành công.


Không đúng, đọc một chút ở đây: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev

Tuyệt quá! cám ơn!!! ;)
Victor VosMottor cảm ơn Monica


23

CẢNH BÁO: Không sử dụng pycryptonữa!

Như bạn có thể đọc trên trang này , việc sử dụng pycryptokhông an toàn nữa:

Pycrypto dễ bị tràn bộ đệm dựa trên heap trong hàm ALGnew trong block_templace.c. Nó cho phép những kẻ tấn công từ xa thực thi mã tùy ý trong ứng dụng python. Nó được gán CVE-2013-7459 .

Pycrypto đã không phát hành bất kỳ bản sửa lỗi nào cho lỗ hổng đó và không có cam kết nào được thực hiện cho dự án kể từ ngày 20 tháng 6 năm 2014.

GIẢI PHÁP: Sử dụng Python3 và pycryptodome!

TL; DR: pip3 install pycryptodome

Đảm bảo gỡ cài đặt các phiên bản khác của cryptohoặc pycryptotrước tiên.

Thiết lập môi trường ảo mới

Để cài đặt môi trường ảo và thiết lập mọi thứ, hãy sử dụng các lệnh sau:

# 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

Để biết thêm thông tin, hãy xem pycryptodome.org


1
Nếu bạn hiện có cài đặt tiền điện tử hoặc pycrypto, trước tiên bạn phải gỡ cài đặt chúng.
Gino Mempin

21

Tôi đã tìm ra giải pháp. Vấn đề có lẽ là ở phân biệt chữ hoa chữ thường (trên Windows).

Chỉ cần thay đổi tên của thư mục:

  • C:\Python27\Lib\site-packages\crypto
  • đến: C:\Python27\Lib\site-packages\Crypto

Đây là cách thư mục được đặt tên sau khi cài đặt pycrypto: nhập mô tả hình ảnh ở đây

Tôi đã thay đổi nó thành: nhập mô tả hình ảnh ở đây

Và bây giờ mã sau hoạt động tốt: nhập mô tả hình ảnh ở đây


Điều này hoạt động, nhưng có quá nhiều gói bên trong tất cả cần được đổi tên.
user1288329


8

nếu bạn đang sử dụng redhat, fedora, centos:

sudo yum install pycrypto

đối với trường hợp của tôi, tôi không thể cài đặt nó bằng pip


Tên gói được tham chiếu này dường như không còn tồn tại trên yum? "pycrypto"
k1DBLITZ

8

Tôi đã gặp vấn đề tương tự 'ImportError: No module named Crypto.Cipher', kể từ khi sử dụng GoogleAppEngineLauncher (phiên bản> 1.8.X) với GAE Boilerplate trên OSX 10.8.5 (Mountain Lion). Trong Google App Engine SDK với thời gian chạy python 2.7, pyCrypto 2.6 là phiên bản được đề xuất. Giải pháp phù hợp với tôi là ...

1) Tải xuống nguồn pycrypto2.6 giải nén nó ở đâu đó ( ~/Downloads/pycrypto26)

ví dụ: git clone https://github.com/dlitz/pycrypto.git

2) cd( cd ~/Downloads/pycrypto26) sau đó

3) Thực hiện lệnh đầu cuối sau bên trong thư mục trước đó để cài đặt pyCrypto 2.6 theo cách thủ công trong thư mục GAE.

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

1
câu hỏi của OP đã làm với Windows và không OSX
gldraphael

Nó có thể là hữu ích để lưu ý rằng cài đặt vào thư mục gốc dự án cũng sẽ làm việc (không phân biệt nền tảng)
ocodo

Đó là câu trả lời tuyệt vời cho người dùng yosemite!
KyungHoon Kim

@Lazaros Dinakis: Đây là giải pháp đã hoạt động .. trong số tất cả các giải pháp được đề cập trong trang này. Cảm ơn
gaurav414u

câu trả lời này đã giải quyết nó cho tôi trên mac OSX Yosemite 10.10.5. Chỉ có điều là cài đặt không thành công với lỗi cho tôi. vì vậy tôi đã sao chép thủ công Crypto lib từ python lib của mình vào google_appengine lib. và bây giờ nó hoạt động.
Boaz Saragossi

7

Nếu bạn là macos, hãy đổi tên thư mục lib lib/python3.7/site-packages/cryptothànhlib/python3.7/site-packages/Crypto


Giải pháp này phù hợp với tôi thay vì các giải pháp khác. Tôi đang sử dụng
MacO

Chôn ở đây là giải pháp phù hợp với tôi (trên Windows 10)
Joseph



3

Làm việc cho tôi (Ubuntu 17.10)

Xóa venv và tạo lại bằng 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 không được dùng nữa, có vấn đề với nó, đã sử dụng Pycryptodome


2

Tôi giải quyết vấn đề này bằng cách thay đổi chữ hoa đầu tiên thành chữ hoa. Đảm bảo '' từ Crypto.Cipher nhập AES '' không '' từ nhập AES của crypto.Cipher ''.


2

Đối với CentOS 7.4, lần đầu tiên tôi cài đặt pip và sau đó là pycrypto bằng cách sử dụng pip:

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

2

Đến nay, tôi đang gặp vấn đề tương tự khi nhập from Crypto.Cipher import AESngay cả khi tôi đã cài đặt / cài đặt lại pycrypto một vài lần. Kết thúc là do pip được mặc định thành python3.

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

cài đặt pycrypto với pip2 sẽ giải quyết được vấn đề này.


1

Đối với Windows 7:

Tôi đã gặp lỗi này "Lỗi mô-đun Crypo.Cipher nhập AES"

Để cài đặt Pycrypto trong Windows,

Hãy thử điều này trong Command Prompt,

Đặt đường dẫn = C: \ Python27 \ Scripts (tức là đường dẫn nơi easy_install nằm)

Sau đó thực hiện như sau,

easy_install pycrypto

Đối với Ubuntu:

Thử cái này,

Tải xuống Pycrypto từ " https://pypi.python.org/pypi/pycrypto "

Sau đó, thay đổi đường dẫn hiện tại của bạn thành đường dẫn đã tải xuống bằng thiết bị đầu cuối của bạn:

Ví dụ: root @ xyz-virtual-machine: ~ / pycrypto-2.6.1 #

Sau đó thực hiện các thao tác sau bằng terminal:

python setup.py cài đặt

Nó làm việc cho tôi. Hy vọng hoạt động cho tất cả ..



1

Có lẽ bạn nên làm như vậy: pycryptodome == 3.6.1 thêm nó vào tệp tin request.txt và cài đặt, thao tác này sẽ loại bỏ báo cáo lỗi. nó hoạt động cho tôi!


1

Điều này đã làm việc cho tôi

pip install pycryptodome==3.4.3

1

Chà, điều này có vẻ lạ nhưng sau khi cài đặt pycryptohoặc pycryptodome, chúng tôi cần cập nhật tên thư mục cryptothành Cryptotronglib/site-packages

Tài liệu tham khảo


0

Tôi với 3,7. Vấn đề vẫn còn sau khi tôi cố gắng cài đặt tiền điện tử. Và pycrypto thất bại trong trường hợp của tôi. Vì vậy, cuối cùng bản dựng của tôi đã được thông qua gói bên dưới: pip install pycryptodome

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.