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.