ImportError: ไม่มีโมดูลชื่อ Crypto.Cipher


120

เมื่อฉันพยายามเรียกใช้ app.py (Python 3.3, PyCrypto 2.6) Virtualenv ของฉันยังคงส่งคืนข้อผิดพลาดที่ระบุไว้ด้านบน ใบแจ้งการนำเข้าของฉันเป็นเพียงfrom Crypto.Cipher import AES. ฉันมองหารายการที่ซ้ำกันและคุณอาจบอกว่ามีบ้าง แต่ฉันลองวิธีแก้ไขแล้ว (แม้ว่าส่วนใหญ่จะไม่ใช่วิธีแก้ปัญหา) และไม่มีอะไรได้ผล

คุณสามารถดูว่าไฟล์เป็นอย่างไรสำหรับ PyCrypto ด้านล่าง:


5
ดูเหมือนว่าคุณจะมีคุณธรรม Virtualenv ของคุณเปิดใช้งานอย่างถูกต้องหรือไม่?
Christian Ternus

@ChristianTernus มันถูกเปิดใช้งานอย่างถูกต้อง
Graham Smith

ฉันมีปัญหาเดียวกัน สิ่งนี้จะฟังดูง่อยเล็กน้อย แต่เพื่อแก้ไขเพียงแค่ฉันหยุดใช้ OSX ฉันติดตั้ง VirtualBox และ linux distro และทุกอย่างใช้งานได้ :)
Jordan

1
รออะไร? ImportErrorจะแสดงในpython 2ขณะที่อยู่ในมันเป็นpython 3 ModuleNotFoundError
Black Thunder

@BlackThunder, อัตราผลตอบแทนpython3 -c 'import foo' ImportError: No module named 'foo'ฉันพลาดอะไรไปหรือเปล่า?
r2evans

คำตอบ:


62

ฉันมีปัญหาเดียวกัน (แม้ว่าจะใช้ Linux) วิธีแก้ปัญหาค่อนข้างง่าย - เพิ่ม:

libraries:
- name: pycrypto
  version: "2.6"

ไปยังapp.yamlไฟล์ของฉัน เนื่องจากสิ่งนี้ทำงานได้อย่างถูกต้องในอดีตฉันจึงถือว่านี่เป็นข้อกำหนดใหม่


1
เพื่อเพิ่มสิ่งนี้อีกเล็กน้อยในกรณีของฉันสิ่งนี้ใช้ไม่ได้เนื่องจากฉันมีล่าม Python หลายเวอร์ชันในเครื่องของฉันและฉันกำลังติดตั้งไลบรารีในเวอร์ชันต่างๆ สิ่งที่ฉันทำคือย้ายไปอยู่ในสภาพแวดล้อมเสมือนจริงและทำงานได้อย่างราบรื่นราวกับผ้าไหม
neaGaze

@neaGaze คุณ "ก้าวเข้าสู่สภาพแวดล้อมเสมือนจริง" อย่างไรเพื่อให้มันทำงานได้ "ราบรื่นเหมือนไหม"?
Praxiteles

1
@Praxiteles เป็นเวลานานแล้วที่ฉันทำโครงการนั้น แต่ฉันคิดว่าฉันใช้การตั้งค่า env เสมือนของ Python ใน Python คุณสามารถใช้เวอร์ชันสแตนด์อโลนหรือสภาพแวดล้อมเสมือนได้ คุณสามารถตรวจสอบลิงค์นี้ได้หากต้องการข้อมูลเพิ่มเติมpythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze

7
คำตอบนี้ไม่ได้อธิบายทุกอย่างคุณกำลังรับapp.yamlไฟล์จากที่ไหน?
Vishrant

3
ไม่ควรใช้pycryptoอีกต่อไป! ตรวจสอบคำตอบของฉันเพื่อหาทางออกที่ดีกว่า!
winklerrr

196

ฉันมีปัญหาเดียวกันกับ Mac ของฉันเมื่อติดตั้งด้วยpipไฟล์. จากนั้นฉันก็ลบpycryptoและติดตั้งอีกครั้งด้วยeasy_installสิ่งนี้:

pip uninstall pycrypto
easy_install pycrypto

ตามที่ลุคแสดงความคิดเห็น: หากคุณมีปัญหาในการเรียกใช้คำสั่งเหล่านี้อย่าลืมเรียกใช้ในฐานะผู้ดูแลระบบ (sudo)

หวังว่านี่จะช่วยได้!

แก้ไข: ตามที่ winklerr บันทึกไว้อย่างถูกต้องข้างต้น pycrypto ไม่ปลอดภัยอีกต่อไป ใช้ pycryptodome แทนเป็นการทดแทนแบบดรอปอิน


4
มันแปลก แต่สิ่งนี้แก้ไขปัญหาบน OS X Mavericks ให้ฉันได้ ฉันต้องการ sudo สำหรับ libs ทั้งระบบ
พอล

2
ขอบคุณฉันใช้ 10.9.3 และฉันได้รับข้อผิดพลาดเดียวกัน ขอบคุณล้าน
ÖzgürFıratÖzpolat

4
ฉันติดตั้งด้วย pip ซึ่งใช้ไม่ได้แล้วก็ easy_install ซึ่งก็ใช้ไม่ได้เช่นกัน (นี่คือบน Windows) เพียงแค่ถอนการติดตั้งด้วย pip ตามที่คุณแนะนำก็ทำให้มันใช้งานได้ ฉันไม่เคยคิดที่จะทำแบบนั้นในอีกล้านปี ขอบคุณ.
user124384

6
สิ่งนี้ยังช่วยประหยัดวันใน El Capitan
งด

2
ใครช่วยอธิบายได้ไหมว่าทำไมถึงได้ผล (บน OSX 10.11.4 พร้อม python จาก homebrew)
Gabe Kopley

102

ฉันพบสิ่งนี้บน Mac เช่นกันและดูเหมือนว่าจะเกี่ยวข้องกับการมีโมดูล "crypto" ที่มีชื่อคล้าย ๆ กัน (ไม่แน่ใจว่ามีไว้เพื่ออะไร) ติดตั้งควบคู่ไปกับ pycrypto ผ่าน pip

การแก้ไขดูเหมือนจะลบทั้ง crypto และ pycrypto ด้วย pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

และการติดตั้ง pycrypto ใหม่:

sudo pip install pycrypto

ตอนนี้มันทำงานได้ตามที่คาดไว้เมื่อฉันทำสิ่งที่ชอบ:

from Crypto.Cipher import AES

เหมือนกันสำหรับฉันใน Windows + Vagrant กับ Ubuntu 14.04 64-bit และ Python3
Juha Untinen

สิ่งนี้ใช้ได้ยกเว้นว่าใน Virtualenv อย่าใช้ sudo
Michael Robellard

31

บนเครื่อง mac ... ถ้าคุณเจอสิ่งนี้ .. ลองดูว่าคุณสามารถนำเข้า crypto แทนได้หรือไม่?

ถ้าเป็นเช่นนั้น .. ชื่อแพ็กเกจคือปัญหาCเทียบกับc. ในการแก้ไขปัญหานี้ .. เพียงเพิ่มบรรทัดเหล่านี้ที่ด้านบนของสคริปต์ของคุณ

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

คุณทราบว่าควรจะสามารถนำเข้า paramiko ได้สำเร็จ


ไม่ถูกต้องอ่านเล็กน้อยที่นี่: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev

ที่ดี! ขอบคุณ!!! ;)
Victor VosMottor ขอบคุณ Monica

25

คำเตือน: อย่าใช้pycryptoอีกต่อไป!

ขณะที่คุณสามารถอ่านบนหน้านี้การใช้งานของpycryptoคือไม่ปลอดภัยอีกต่อไป:

Pycrypto มีความเสี่ยงที่จะเกิดบัฟเฟอร์ล้นตามฮีปในฟังก์ชัน ALGnew ใน block_templace.c ช่วยให้ผู้โจมตีจากระยะไกลสามารถรันโค้ดได้ตามอำเภอใจในแอปพลิเคชัน python มันได้รับการมอบหมายCVE-2013-7459จำนวน

Pycrypto ไม่ได้แก้ไขช่องโหว่ดังกล่าวและไม่มีการกระทำใด ๆ กับโครงการตั้งแต่วันที่ 20 มิ.ย. 2014

วิธีแก้ปัญหา: ใช้ Python3 และpycryptodome!

TL; DR: pip3 install pycryptodome

ตรวจสอบให้แน่ใจว่าได้ถอนการติดตั้งเวอร์ชันอื่นcryptoหรือpycryptoก่อน

การตั้งค่าสภาพแวดล้อมเสมือนใหม่

ในการติดตั้งสภาพแวดล้อมเสมือนและตั้งค่าทุกอย่างให้ใช้คำสั่งต่อไปนี้:

# 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

สำหรับข้อมูลเพิ่มเติมโปรดดูที่pycryptodome.org


1
หากคุณมีการติดตั้ง crypto หรือ pycrypto คุณต้องถอนการติดตั้งก่อน
Gino Mempin


21

ฉันพบทางออกแล้ว ปัญหาอาจเกิดจากความอ่อนไหวของตัวพิมพ์ (บน Windows)

เพียงแค่เปลี่ยนชื่อโฟลเดอร์:

  • C:\Python27\Lib\site-packages\crypto
  • ถึง: C:\Python27\Lib\site-packages\Crypto

นี่คือวิธีตั้งชื่อโฟลเดอร์หลังจากการติดตั้ง pycrypto: ใส่คำอธิบายภาพที่นี่

ฉันเปลี่ยนเป็น: ใส่คำอธิบายภาพที่นี่

และตอนนี้รหัสต่อไปนี้ใช้งานได้ดี: ใส่คำอธิบายภาพที่นี่


วิธีนี้ใช้งานได้ แต่มีแพคเกจจำนวนมากเกินไปที่จะต้องเปลี่ยนชื่อ
user1288329


8

หากคุณใช้ redhat, fedora, centos:

sudo yum install pycrypto

สำหรับกรณีของฉันฉันไม่สามารถติดตั้งโดยใช้ pip ได้


ชื่อแพ็กเกจที่อ้างถึงนี้ดูเหมือนจะไม่มีอยู่ในยำ? "pycrypto"
k1DBLITZ

8

ฉันมีปัญหาเดียวกัน'ImportError: No module named Crypto.Cipher'ตั้งแต่ใช้ GoogleAppEngineLauncher (เวอร์ชัน> 1.8.X) กับ GAE Boilerplate บน OSX 10.8.5 (Mountain Lion) ใน Google App Engine SDK ที่มีรันไทม์ python 2.7 pyCrypto 2.6 เป็นเวอร์ชันที่แนะนำ ทางออกที่ได้ผลสำหรับฉันคือ ...

1) ดาวน์โหลดแหล่งที่มา pycrypto2.6 แยกออกจากที่ใดที่หนึ่ง ( ~/Downloads/pycrypto26)

เช่น git clone https://github.com/dlitz/pycrypto.git

2) cd( cd ~/Downloads/pycrypto26) แล้ว

3) ดำเนินการคำสั่งเทอร์มินัลต่อไปนี้ภายในโฟลเดอร์ก่อนหน้าเพื่อติดตั้ง pyCrypto 2.6 ด้วยตนเองในโฟลเดอร์ GAE

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

1
คำถามของ OP เกี่ยวข้องกับ Windows ไม่ใช่ OSX
galdin

อาจเป็นประโยชน์ที่จะทราบว่าการติดตั้งไปยังรูทโปรเจ็กต์จะใช้งานได้เช่นกัน (โดยไม่คำนึงถึงแพลตฟอร์ม)
ocodo

เป็นคำตอบที่ดีสำหรับผู้ใช้ yosemite!
KyungHoon Kim

@Lazaros Dinakis: นี่คือวิธีแก้ปัญหาที่ได้ผล .. ของโซลูชันทั้งหมดที่กล่าวถึงในหน้านี้ ขอบคุณ
gaurav414u

คำตอบนี้แก้ไขให้ฉันบน mac OSX Yosemite 10.10.5 สิ่งเดียวคือการติดตั้งล้มเหลวโดยมีข้อผิดพลาดสำหรับฉัน ดังนั้นฉันจึงคัดลอก Crypto lib ด้วยตนเองจาก python lib ไปยัง google_appengine lib และตอนนี้มันใช้งานได้
Boaz Saragossi

7

หากคุณเป็น macOS ให้เปลี่ยนชื่อโฟลเดอร์ lib lib/python3.7/site-packages/cryptoเป็นlib/python3.7/site-packages/Crypto


อันนี้ใช้ได้ผลกับฉันเมื่อเทียบกับโซลูชันอื่น ๆ ฉันใช้ MacO
user3527975

ฝังไว้ที่นี่เป็นวิธีแก้ปัญหาที่เหมาะกับฉัน (บน Windows 10)
โจเซฟ



3

ทำงานให้ฉัน (Ubuntu 17.10)

ลบ venv แล้วสร้างใหม่ด้วย 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 เลิกใช้แล้วมีปัญหากับมันใช้ Pycryptodome


2

ฉันแก้ปัญหานี้โดยเปลี่ยนตัวอักษรตัวแรกเป็นตัวพิมพ์ใหญ่ ตรวจสอบให้แน่ใจว่า '' จาก Crypto.Cipher นำเข้า AES '' ไม่ใช่ '' จาก crypto Cipher import AES ''


2

สำหรับ CentOS 7.4 ฉันติดตั้ง pip ก่อนแล้วจึงใช้ pycrypto โดยใช้ pip:

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

2

จนถึงปัจจุบันฉันประสบปัญหาเดียวกันเมื่อนำเข้าfrom Crypto.Cipher import AESแม้ว่าฉันจะติดตั้ง / ติดตั้ง pycrypto ใหม่ไปแล้วสองสามครั้ง สุดท้ายเป็นเพราะ pip ​​ผิดนัดเป็น python3

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

การติดตั้ง pycrypto ด้วย pip2 ควรแก้ปัญหานี้ได้


1

สำหรับ Windows 7:

ฉันพบข้อผิดพลาดนี้ "ข้อผิดพลาดของโมดูล Crypo.Cipher import AES"

ในการติดตั้ง Pycrypto ใน Windows

ลองสิ่งนี้ในพรอมต์คำสั่ง

ตั้งค่า path = C: \ Python27 \ Scripts (เช่นพา ธ ที่ easy_install ตั้งอยู่)

จากนั้นดำเนินการต่อไปนี้

easy_install pycrypto

สำหรับ Ubuntu:

ลองสิ่งนี้

ดาวน์โหลด Pycrypto จาก " https://pypi.python.org/pypi/pycrypto "

จากนั้นเปลี่ยนเส้นทางปัจจุบันของคุณเป็นเส้นทางที่ดาวน์โหลดโดยใช้เทอร์มินัลของคุณ:

เช่น: root @ xyz-virtual-machine: ~ / pycrypto-2.6.1 #

จากนั้นดำเนินการต่อไปนี้โดยใช้เทอร์มินัล:

python setup.py ติดตั้ง

มันได้ผลสำหรับฉัน ความหวังใช้ได้กับทุกคน ..


1

ปัญหานี้สามารถแก้ไขได้โดยการติดตั้งคอมไพเลอร์ C ++ (python27 หรือ python26) ดาวน์โหลดจาก Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=44266และเรียกใช้คำสั่งอีกครั้ง: pip install pycryptoเพื่อเรียกใช้การเข้าถึงเว็บ gui เมื่อคุณฆ่ากระบวนการของeasy_install.exe.


1

บางทีคุณควรทำสิ่งนี้: pycryptodome == 3.6.1 เพิ่มใน requirements.txt และติดตั้งซึ่งจะกำจัดรายงานข้อผิดพลาด มันได้ผลสำหรับฉัน!




0

ฉันอยู่กับ 3.7 ปัญหายังคงอยู่หลังจากที่ฉันพยายามติดตั้ง crypto และ pycrypto ก็ล้มเหลวในกรณีของฉัน ดังนั้นในที่สุดบิลด์ของฉันก็ส่งผ่านแพ็คเกจด้านล่าง: pip install pycryptodome

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.