ImportError: Nenhum módulo denominado Crypto.Cipher

120

Quando tento executar app.py (Python 3.3, PyCrypto 2.6), meu virtualenv continua retornando o erro listado acima. Minha declaração de importação é justa from Crypto.Cipher import AES. Procurei duplicatas e você pode dizer que existem, mas tentei as soluções (embora a maioria nem sejam soluções) e nada funcionou.

Você pode ver como são os arquivos do PyCrypto abaixo:

Graham Smith
fonte
5
Parece que você está em um virtualenv. Seu virtualenv está ativado corretamente?
Christian Ternus
@ChristianTernus Ele está ativado corretamente.
Graham Smith
Eu tive o mesmo problema. Isso vai soar um pouco chato, mas para resolver isso apenas parei de usar o OSX, instalei o VirtualBox e uma distro Linux e tudo funcionou :)
Jordan
1
Espere o que? ImportErroré mostrado em python 2enquanto python 3nele está ModuleNotFoundError.
Black Thunder
@BlackThunder, python3 -c 'import foo'produz ImportError: No module named 'foo'. Perdi alguma coisa?
r2evans

Respostas:

62

Eu tive o mesmo problema (embora no Linux). A solução era bastante simples - adicione:

libraries:
- name: pycrypto
  version: "2.6"

ao meu app.yamlarquivo. Como isso funcionou corretamente no passado, presumo que seja um novo requisito.

Patrick Jordan
fonte
1
Só para adicionar um pouco mais a isso, no meu caso isso não estava funcionando porque eu tinha várias versões de interpretadores Python em minha máquina e estava instalando as bibliotecas em diferentes versões. O que eu fiz foi movido para o ambiente virtual e funcionou suave como seda.
neaGaze
@neaGaze Como você "mudou para o ambiente virtual" para fazê-lo funcionar "suave como seda"?
Praxiteles
1
@Praxiteles Bem, já faz um tempo desde que fiz esse projeto, mas acho que usei a configuração de env virtual Python. Em Python, você pode usar uma versão autônoma ou o ambiente virtual. Você pode verificar este link se precisar de mais informações pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze
7
Esta resposta não explica tudo, onde você está obtendo o app.yamlarquivo?
Vishrant
3
Você não deve usar pycryptomais! Verifique minha resposta para uma solução melhor!
winklerrr
196

Tive o mesmo problema no meu Mac ao instalar com pip. Em seguida, removi pycryptoe instalei novamente com easy_install, assim:

pip uninstall pycrypto
easy_install pycrypto

também como Luke comentou: Se você tiver problemas para executar esses comandos, certifique-se de executá-los como admin (sudo)

Espero que isto ajude!

EDITAR: Como o winklerr corretamente observou acima, o pycrypto não é mais seguro. Em vez disso, use o pycryptodome, que é um substituto imediato

elad silver
fonte
4
É estranho, mas isso resolveu o problema no OS X Mavericks para mim. Eu precisava de sudo para bibliotecas de todo o sistema.
Paul
2
Obrigado elad, estou usando 10.9.3 e recebi o mesmo erro. um milhão de agradecimentos
Özgür Fırat Özpolat
4
Eu tinha instalado com pip, que não funcionou, e easy_install, que também não funcionou. (Isso está no Windows.) Simplesmente desinstalá-lo com pip como você sugeriu de alguma forma o fez funcionar. Eu nunca teria pensado em fazer isso em um milhão de anos. Obrigado.
user124384
6
Isso ainda salva o dia em El Capitan.
não ser
2
Alguém pode explicar por que isso funciona? (no OSX 10.11.4 com python do homebrew)
Gabe Kopley
102

Eu encontrei isso no Mac também, e parece estar relacionado a ter um módulo "crypto", infelizmente com o mesmo nome (não tenho certeza para que serve) instalado junto com o pycrypto via pip.

A correção parece estar removendo criptografia e pycrypto com pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

e reinstalar o pycrypto:

sudo pip install pycrypto

Agora funciona como esperado quando eu faço algo como:

from Crypto.Cipher import AES
user42935
fonte
O mesmo para mim no Windows + Vagrant com Ubuntu 14.04 64 bits e Python3
Juha Untinen
Isso funciona, exceto que em um virtualenv não use sudo
Michael Robellard
31

No mac ... se você topar com isso ... tente ver se você pode importar criptografia em vez disso?

Se assim for .. o nome do pacote é a questão Cvs c. Para contornar isso ... basta adicionar essas linhas no início do seu script.

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

Você sabe que deve conseguir importar paramiko com sucesso.

Pho
fonte
Incorreto
Igor Micev
Ótimo! THX!!! ;)
Victor VosMottor agradece Monica
24

Desinstalando cryptoe pycryptofunciona em mim. Em seguida, instale apenas pycrypto:

pip uninstall crypto 
pip uninstall pycrypto 
pip install pycrypto
tréplica
fonte
1
Aqui está a explicação para essa solução nos documentos: pycryptodome.readthedocs.io/en/latest/src/…
Ilya Orson
23

AVISO: Não use pycryptomais!

Como você pode ler nesta página , o uso de nãopycrypto é mais seguro:

Pycrypto é vulnerável a um estouro de buffer baseado em heap na função ALGnew em block_templace.c. Ele permite que atacantes remotos executem código arbitrário no aplicativo python. Foi atribuído o número CVE-2013-7459 .

O Pycrypto não lançou nenhuma correção para essa vulnerabilidade e nenhum commit foi feito para o projeto desde 20 de junho de 2014.

SOLUÇÃO: Use Python3 e pycryptodome!

TL; DR: pip3 install pycryptodome

Certifique-se de desinstalar outras versões de cryptoou pycryptoprimeiro.

Configurando um novo ambiente virtual

Para instalar um ambiente virtual e configurar tudo, use os seguintes comandos:

# 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

Para obter mais informações, consulte pycryptodome.org

Winklerrr
fonte
1
Se você possui atualmente instalações de crypto ou pycrypto, você deve desinstalá-los primeiro.
Gino Mempin
21

Eu encontrei a solução. O problema está provavelmente na distinção entre maiúsculas e minúsculas (no Windows).

Basta alterar o nome da pasta:

  • C:\Python27\Lib\site-packages\crypto
  • para: C:\Python27\Lib\site-packages\Crypto

Este é o nome da pasta após a instalação do pycrypto: insira a descrição da imagem aqui

Eu mudei para: insira a descrição da imagem aqui

E agora o seguinte código funciona bem: insira a descrição da imagem aqui

damian1baran
fonte
Isso funciona, mas há muitos pacotes dentro e todos precisam ser renomeados.
user1288329
8

se você estiver usando redhat, fedora, centos:

sudo yum install pycrypto

para o meu caso, eu não poderia instalá-lo usando pip

Hamed
fonte
Este nome de pacote referenciado parece não existir mais no yum? "pycrypto"
k1DBLITZ
8

Eu tive o mesmo problema 'ImportError: No module named Crypto.Cipher', desde usar GoogleAppEngineLauncher (versão> 1.8.X) com GAE Boilerplate no OSX 10.8.5 (Mountain Lion). No SDK do Google App Engine com tempo de execução python 2.7, pyCrypto 2.6 é a versão sugerida. A solução que funcionou para mim foi ...

1) Baixe a fonte pycrypto2.6 e extraia em algum lugar ( ~/Downloads/pycrypto26)

por exemplo, git clone https://github.com/dlitz/pycrypto.git

2) cd( cd ~/Downloads/pycrypto26) então

3) Execute o seguinte comando de terminal dentro da pasta anterior para instalar o pyCrypto 2.6 manualmente na pasta GAE.

sudo python setup.py install --install-lib /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine
Lazaros Dinakis
fonte
1
a pergunta do OP é sobre Windows e não OSX
gldraphael
Pode ser útil observar que a instalação na raiz do projeto também funcionará (independentemente da plataforma)
ocodo
É uma ótima resposta para o usuário do yosemite!
KyungHoon Kim
@Lazaros Dinakis: Esta é a solução que funcionou .. de todas as soluções mencionadas nesta página. Obrigado
gaurav414u
esta resposta resolveu para mim no mac OSX Yosemite 10.10.5. A única coisa é que a instalação falhou com erros para mim. então, copiei manualmente a lib Crypto da minha lib python para lib google_appengine. e agora funciona.
Boaz Saragossi de
7

Se você é um macos, renomeie a pasta lib lib/python3.7/site-packages/cryptoparalib/python3.7/site-packages/Crypto

Jack
fonte
Este funcionou para mim ao contrário de outras soluções. Estou em MacOs
usuário3527975
Enterrada aqui está a solução que funcionou para mim (no Windows 10)
Joseph
3

Experimente com pip3 :

sudo pip3 install pycrypto
Arthur araújo
fonte
3

Funcionou para mim (Ubuntu 17.10)

Removendo o venv e criando-o novamente com 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

O Pycrypto está obsoleto, teve problemas com ele, usou o Pycryptodome

applekate
fonte
2

Eu resolvo esse problema mudando a primeira letra para maiúscula. Certifique-se de que '' importe AES de Crypto.Cipher '' não '' de AES de importação de crypto.Cipher ''.

Zesheng LI
fonte
2

Para CentOS 7.4, instalei primeiro o pip e depois pycrypto usando pip:

> sudo yum -y install python-pip 
> sudo python -m pip install pycrypto
Stuhpa
fonte
2

Até o momento, estou tendo o mesmo problema ao importar, from Crypto.Cipher import AESmesmo depois de instalar / reinstalar o pycrypto algumas vezes. No final das contas é porque pip padronizou para python3.

~ pip --version
pip 18.0 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

instalar o pycrypto com pip2 deve resolver este problema.

Ryan
fonte
1

Para Windows 7:

Eu obtive este erro "Erro de módulo Crypo.Cipher import AES"

Para instalar o Pycrypto no Windows,

Tente isso no prompt de comando,

Definir caminho = C: \ Python27 \ Scripts (ou seja, caminho onde easy_install está localizado)

Em seguida, execute o seguinte,

easy_install pycrypto

Para Ubuntu:

Tente isto,

Baixe o Pycrypto em " https://pypi.python.org/pypi/pycrypto "

Em seguida, altere o caminho atual para o caminho baixado usando seu terminal:

Por exemplo: root @ xyz-virtual-machine: ~ / pycrypto-2.6.1 #

Em seguida, execute o seguinte usando o terminal:

python setup.py install

Funcionou para mim. A esperança funciona para todos ..

JayaPrakash
fonte
1

Talvez você deva fazer isso: pycryptodome == 3.6.1 adicione-o a requirements.txt e instale, o que deve eliminar o relatório de erro. funciona para mim!

eu sinto sua falta
fonte
1

Isso funcionou para mim

pip install pycryptodome==3.4.3
Saad Mirza
fonte
1

Bem, isso pode parecer estranho, mas após a instalação pycryptoou pycryptodome, precisamos atualizar o nome do diretório cryptopara Cryptoemlib/site-packages

Referência

AB Abhi
fonte
0

Estou com 3.7. O problema permanece depois que tento instalar o crypto. E a criptografia simplesmente falha no meu caso. Então, no final, minha construção passou pelo pacote abaixo: pip install pycryptodome

Quansheng Li
fonte