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.