ImportError: Немає модуля з іменем Crypto.Cipher


120

Коли я намагаюся запустити app.py (Python 3.3, PyCrypto 2.6), мій virtualenv продовжує повертати вказану вище помилку. Моя заява про імпорт справедливаfrom Crypto.Cipher import AES . Я шукав дублікати, і ви можете сказати, що їх є, але я спробував рішення (хоча більшість це навіть не рішення), і нічого не вийшло.

Нижче ви можете побачити, як виглядають файли для PyCrypto:


5
Схоже, ти у віртуалі. Чи правильно активований ваш virtualenv?
Крістіан Терн

@ChristianTernus Це активовано належним чином.
Грем Сміт

У мене було те саме питання. Це буде звучати трохи кульгаво, але щоб вирішити це, я просто перестав використовувати OSX, встановив VirtualBox та linux distro, і все це спрацювало :)
Jordan

1
Чекати, що? ImportErrorпоказано в, python 2поки в python 3ньому є ModuleNotFoundError.
Чорний грім

@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 Як ти "перемістився у віртуальне середовище", щоб він працював "гладким, як шовк"?
Праксителес

1
@Praxiteles Ну минуло певний час, як я зробив цей проект, але я думаю, що я скористався налаштуванням віртуальної обстановки Python. У Python ви можете використовувати окрему версію або віртуальне середовище. Ви можете ознайомитись з цим посиланням, якщо вам потрібна додаткова інформація pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze

7
Ця відповідь не пояснює все, де ви берете app.yamlфайл?
Вишран

3
Більше не слід використовувати pycrypto! Перевірте мою відповідь на краще рішення!
winklerrr

196

У мене була така ж проблема на моєму Mac при установці pip. Потім я видалив pycryptoі встановив його знову easy_install, як це:

pip uninstall pycrypto
easy_install pycrypto

також, як прокоментував Лука: Якщо у вас виникли проблеми із виконанням цих команд, не забудьте запустити їх як адміністратор (sudo)

Сподіваюся, це допомагає!

РЕДАКТУВАННЯ: Як вінклер правильно зазначає вище, пікрипто вже не є безпечним. Використовуйте замість цього пікриптодом, він є заміною


4
Як це не дивно, але це вирішило проблему на OS X Mavericks для мене. Мені потрібно судо для системних широких губ.
Павло

2
дякую, рада, я використовую 10.9.3, і я отримав таку ж помилку. спасибі мільйон
Özgür Fırat Özpolat

4
Я встановив його за допомогою pip, який не працював, потім easy_install, який також не працював. (Це в Windows.) Просто видаліть його за допомогою pip, як ви запропонували, якось змусив його працювати. Я б ніколи не думав це робити за мільйон років. Дякую.
користувач124384

6
Це все-таки економить день на Ель-Капітані.
неприйняття

2
Хтось може пояснити, чому це працює? (на OSX 10.11.4 з
пітоном

102

Я наткнувся на це і на Mac, і, схоже, це пов'язано з тим, що, на жаль, встановлений аналогічно названий "крипто" модуль (не впевнений, для чого це), встановлений поряд з pycrypto через pip.

Здається, виправлення видаляє і криптовалюту, і pycrypto за допомогою pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

та перевстановлення pycrypto:

sudo pip install pycrypto

Тепер він працює так, як очікувалося, коли я роблю щось на кшталт:

from Crypto.Cipher import AES

Те саме для мене в Windows + Vagrant з 64-розрядною версією Ubuntu 14.04 та Python3
Juha Untinen

Це працює, за винятком того, що у virtualenv не використовують
судо

31

На mac ... якщо ви зіткнулися з цим .. спробуйте переконатися, чи можете ви замість цього імпортувати крипто?

Якщо так .. назва пакета - це проблема Cпроти c. Щоб обійти це .. просто додайте ці рядки до верхньої частини вашого сценарію.

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

Ви знаєте, має бути можливість імпортувати параміко успішно.


Це не правильно, читайте трохи тут: pycryptodome.readthedocs.io/en/latest/src/…
Ігор

Чудово! Дякую!!! ;)
Віктор VosMottor дякує Моніці


23

УВАГА: Більше не використовуйте 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
Якщо у вас зараз є установки криптовалют або pycrypto, ви повинні спочатку їх видалити.
Джино Мемпін

21

Я знайшов рішення. Випуск, ймовірно, у випадку чутливості до випадків (в Windows).

Просто змініть назву папки:

  • C:\Python27\Lib\site-packages\crypto
  • до: C:\Python27\Lib\site-packages\Crypto

Ось як назвали папку після встановлення pycrypto: введіть тут опис зображення

Я змінив це на: введіть тут опис зображення

А тепер такий код працює добре: введіть тут опис зображення


Це працює, але всередині занадто багато пакетів, які потрібно перейменувати.
користувач1288329


8

якщо ви використовуєте redhat, fedora, centos:

sudo yum install pycrypto

у моєму випадку я не міг встановити його за допомогою pip


Здається, ця назва пакету більше не існує в yum? "pycrypto"
k1DBLITZ

8

У мене була така ж проблема 'ImportError: No module named Crypto.Cipher', оскільки я використовував GoogleAppEngineLauncher (версія> 1.8.X) з котлом GAE на OSX 10.8.5 (Mountain Lion). У SDK 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
Питання ОП стосується Windows, а не OSX
gldraphael

Можливо, буде корисно зауважити, що встановлення на корінь проекту також буде працювати (незалежно від платформи)
ocodo

Це прекрасна відповідь для користувача йосеміту!
KyungHoon Kim

@Lazaros Dinakis: Це рішення, яке спрацювало .. усіх рішень, зазначених на цій сторінці. Дякую
gaurav414u

ця відповідь вирішила його для мене на Mac OSX Yosemite 10.10.5. Єдина річ, що встановлення не вдалось зі мною помилок. тож я вручну скопіював Crypto lib з моєї пітонової в lib google_appengine. і зараз це працює.
Боаз Сарагоссі

7

Якщо ви Mac, перейменуйте папку lib lib/python3.7/site-packages/cryptoуlib/python3.7/site-packages/Crypto


Цей працював на мене на відміну від інших рішень. Я на
MacO

Тут поховано рішення, яке працювало на мене (на 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 застарілий, з ним були проблеми, застосовували Pycryptodom


2

Я вирішую цю проблему, змінивши регістр першої літери на верхній. Переконайтеся, що "" з імпорту Crypto.Cipher AES "" не "" з імпорту AES crypto.Cipher "".


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. Зрештою, це тому, що піп за замовчуванням до 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,

Спробуйте це в командному рядку,

Встановити шлях = 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

Можливо, вам слід так: pycryptodome == 3.6.1 додати його до вимог.txt та встановити, що повинно усунути повідомлення про помилку. це працює для мене!



1

Ну це може здатися дивним , але після установки pycryptoабо pycryptodome, нам необхідно оновити ім'я каталогу cryptoдля Cryptoвlib/site-packages

Довідково


0

Я з 3,7. Проблема залишається після того, як я спробую встановити криптовалюту. І пікрипто просто не вдається в моєму випадку. Отже, врешті-решт моя збірка пройшла через пакет нижче: pip встановив pycryptodome

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.