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, и все заработало :)
Джордан
1
Чего ждать? ImportErrorотображается в, python 2а в python 3нем ModuleNotFoundError.
Black Thunder
@BlackThunder, python3 -c 'import foo'уступает ImportError: No module named 'foo'. Я что-то пропустил?
r2evans 02

Ответы:

62

У меня была такая же проблема (правда, в Linux). Решение было довольно простым - добавить:

libraries:
- name: pycrypto
  version: "2.6"

в мой app.yamlфайл. Поскольку в прошлом это работало правильно, я предполагаю, что это новое требование.

Патрик Джордан
источник
1
Чтобы добавить к этому немного больше, в моем случае это не сработало, поскольку у меня было несколько версий интерпретаторов Python на моем компьютере, и я устанавливал библиотеки в разных версиях. То, что я сделал, было перенесено в виртуальную среду, и все работало гладко, как шелк.
neaGaze 05
@neaGaze Как вы «переместились в виртуальную среду», чтобы заставить ее работать «гладко, как шелк»?
Пракситель
1
@Praxiteles Я давно не работал над этим проектом, но я думаю, что использовал настройку виртуального окружения 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 выше, пикрипто больше не является безопасным. Вместо этого используйте пикриптодом, это прямая замена

Elad Silver
источник
4
Это странно, но это устранило проблему с OS X Mavericks для меня. Мне нужен sudo для общесистемных библиотек.
Пол
2
спасибо, элад, я использую 10.9.3, и у меня такая же ошибка. спасибо миллион
Özgür Fırat Özpolat
4
Я установил его с помощью pip, который не работал, затем easy_install, который также не работал. (Это в Windows.) Простое удаление его с помощью pip, как вы предлагали, каким-то образом заставило его работать. Я бы никогда не подумал сделать это через миллион лет. Спасибо.
user124384
6
Это все еще спасает положение Эль-Капитана.
небытие
2
Кто-нибудь может объяснить, почему это работает? (в OSX 10.11.4 с питоном из homebrew)
Гейб Копли 02
102

Я столкнулся с этим и на Mac, и, похоже, это связано с тем, что вместе с pycrypto через pip установлен модуль «crypto» с таким же названием (не уверен, для чего он нужен).

Похоже, исправление удаляет и крипто, и пикрипто с помощью pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

и переустановка pycrypto:

sudo pip install pycrypto

Теперь он работает должным образом, когда я делаю что-то вроде:

from Crypto.Cipher import AES
user42935
источник
То же самое для меня в Windows + Vagrant с 64-разрядной версией Ubuntu 14.04 и Python3
Юха Унтинен
Это работает, за исключением того, что в virtualenv не используйте sudo
Майкл Робеллард 09
31

На Mac ... если вы столкнетесь с этим ... попробуйте вместо этого импортировать криптовалюту?

Если это так .. имя пакета является вопрос Cпротив c. Чтобы обойти это .. просто добавьте эти строки в начало вашего скрипта.

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

Вы знаете, что должна иметь возможность успешно импортировать paramiko.

фо
источник
Это неправильно, прочтите здесь: pycryptodome.readthedocs.io/en/latest/src/…
Игорь Мичев
Большой! Спасибо!!! ;)
Виктор ВосМоттор благодарит Монику
24

Деинсталлирует cryptoи pycryptoработает у меня. Затем установите только pycrypto:

pip uninstall crypto 
pip uninstall pycrypto 
pip install pycrypto
tthreetorch
источник
1
Вот объяснение этого решения из документации: pycryptodome.readthedocs.io/en/latest/src/…
Илья Орсон
24

ВНИМАНИЕ: больше не используйте 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.

winklerrr
источник
1
Если у вас в настоящее время установлены криптографические или pycrypto, вы должны сначала удалить их.
Gino Mempin
21

Я нашел решение. Вероятно, проблема в чувствительности к регистру (в Windows).

Просто измените название папки:

  • C:\Python27\Lib\site-packages\crypto
  • чтобы: C:\Python27\Lib\site-packages\Crypto

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

Я изменил его на: введите описание изображения здесь

И теперь следующий код работает нормально: введите описание изображения здесь

damian1baran
источник
Это работает, но внутри слишком много пакетов, которые нужно переименовать.
user1288329
8

если вы используете redhat, fedora, centos:

sudo yum install pycrypto

в моем случае я не смог установить его с помощью pip

Хамед
источник
Это указанное имя пакета больше не существует в yum? "pycrypto"
k1DBLITZ
8

У меня была такая же проблема 'ImportError: No module named Crypto.Cipher', так как я использовал GoogleAppEngineLauncher (версия> 1.8.X) с GAE Boilerplate на OSX 10.8.5 (Mountain Lion). В SDK Google App Engine со средой выполнения 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
galdin
Может быть полезно отметить, что установка в корневой каталог проекта также будет работать (независимо от платформы)
ocodo
Это отличный ответ для пользователей йосемити!
Кён Хун Ким
@Lazaros Dinakis: Это решение, которое сработало .. из всех решений, упомянутых на этой странице. Спасибо
gaurav414u
этот ответ решил это для меня на Mac OSX Yosemite 10.10.5. Единственное, для меня установка не удалась с ошибками. поэтому я вручную скопировал Crypto lib из моей библиотеки python в библиотеку google_appengine. и теперь это работает.
Боаз Сарагосси
7

Если у вас macos, переименуйте папку lib lib/python3.7/site-packages/cryptoвlib/python3.7/site-packages/Crypto

разъем
источник
Это сработало для меня, в отличие от других решений. Я использую MacOs
user3527975
Здесь похоронено решение, которое сработало для меня (в Windows 10)
Джозеф
3

Попробуйте с помощью pip3 :

sudo pip3 install pycrypto
Артур Араужо
источник
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

applekate
источник
2

Я решил эту проблему, изменив регистр первой буквы на верхний. Убедитесь, что '' из Crypto.Cipher импортировать AES '' не '' из Crypto.Cipher import AES ''.

Zesheng LI
источник
2

Для CentOS 7.4 я сначала установил pip, а затем pycrypto с помощью pip:

> sudo yum -y install python-pip 
> sudo python -m pip install pycrypto
stuhpa
источник
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,

Попробуйте это в командной строке,

Задайте путь = 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

У меня это сработало. Надежда работает на всех ..

JayaPrakash
источник
1

Эту проблему можно решить, установив компилятор C ++ (python27 или python26). Загрузите его с сайта Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=44266 и повторно запустите команду: pip install pycryptoдля запуска веб-доступа к графическому интерфейсу пользователя, когда вы убиваете процесс easy_install.exe.

user8094201
источник
1

Возможно, вам стоит сделать следующее: pycryptodome == 3.6.1 добавить его в requirements.txt и установить, что должно устранить отчет об ошибке. меня устраивает!

я скучаю по тебе
источник
1

Это сработало для меня

pip install pycryptodome==3.4.3
Саад Мирза
источник
1

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

Ссылка

AB Abhi
источник
0

Я с 3.7. Проблема остается после того, как я попытаюсь установить криптовалюту. И в моем случае pycrypto просто не работает. Итак, в итоге моя сборка прошла через пакет ниже: pip install pycryptodome

Цюаньшэн Ли
источник