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:


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.


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


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

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.





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


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


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


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

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


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

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


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 ''.


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

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.


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 ..



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!



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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.