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 выше, пикрипто больше не является безопасным. Вместо этого используйте пикриптодом, это прямая замена


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

То же самое для меня в 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

ВНИМАНИЕ: больше не используйте 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, вы должны сначала удалить их.
— 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


Это указанное имя пакета больше не существует в 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

Работал у меня (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,

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

Задайте путь = 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для запуска веб-доступа к графическому интерфейсу пользователя, когда вы убиваете процесс easy_install.exe.


1

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



1

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

Ссылка


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.