ImportError: aucun module nommé Crypto.Cipher


120

Lorsque j'essaie d'exécuter app.py (Python 3.3, PyCrypto 2.6), mon virtualenv continue de renvoyer l'erreur répertoriée ci-dessus. Ma déclaration d'importation est juste from Crypto.Cipher import AES. J'ai cherché des doublons et vous pourriez dire qu'il y en a, mais j'ai essayé les solutions (bien que la plupart ne soient même pas des solutions) et rien n'a fonctionné.

Vous pouvez voir à quoi ressemblent les fichiers pour PyCrypto ci-dessous:


5
On dirait que vous êtes dans une virtualenv. Votre virtualenv est-il correctement activé?
Christian Ternus

@ChristianTernus Il est activé correctement.
Graham Smith

J'ai eu le même problème. Cela semblera un peu boiteux mais pour le résoudre, j'ai arrêté d'utiliser OSX, j'ai installé VirtualBox et une distribution Linux et tout a fonctionné :)
Jordanie

1
Attends quoi? ImportErrorest affiché python 2pendant python 3qu'il est ModuleNotFoundError.
Black Thunder

@BlackThunder, python3 -c 'import foo'cède ImportError: No module named 'foo'. Ai-je oublié quelque chose?
r2evans le

Réponses:


62

J'ai eu le même problème (bien que sur Linux). La solution était assez simple - ajoutez:

libraries:
- name: pycrypto
  version: "2.6"

à mon app.yamldossier. Puisque cela fonctionnait correctement dans le passé, je suppose que c'est une nouvelle exigence.


1
Juste pour ajouter un peu plus à cela, dans mon cas, cela ne fonctionnait pas car j'avais plusieurs versions d'interpréteurs Python sur ma machine et j'installais les bibliothèques dans différentes versions. Ce que j'ai fait a été déplacé dans l'environnement virtuel et cela a fonctionné aussi bien que la soie.
neaGaze

@neaGaze Comment vous êtes-vous "déplacé dans l'environnement virtuel" pour le faire fonctionner "lisse comme de la soie"?
Praxiteles

1
@Praxiteles Eh bien, cela fait un moment que j'ai fait ce projet mais je pense que j'ai utilisé le paramètre d'environnement virtuel Python. En Python, vous pouvez utiliser une version autonome ou l'environnement virtuel. Vous pouvez consulter ce lien si vous avez besoin de plus d'informations pythonforbeginners.com/basics/how-to-use-python-virtualenv
neaGaze

7
Cette réponse n'explique pas tout, où obtenez-vous le app.yamlfichier?
Vishrant

3
Vous ne devriez plus en utiliser pycrypto! Vérifiez ma réponse pour une meilleure solution!
winklerrr

196

J'ai eu le même problème sur mon Mac lors de l'installation avec pip. Je l'ai ensuite retiré pycryptoet installé à nouveau avec easy_install, comme ceci:

pip uninstall pycrypto
easy_install pycrypto

également comme Luke l'a commenté: Si vous rencontrez des problèmes pour exécuter ces commandes, assurez-vous de les exécuter en tant qu'administrateur (sudo)

J'espère que cela t'aides!

EDIT: Comme winklerr le note correctement ci-dessus, pycrypto n'est plus sûr. Utilisez plutôt pycryptodome, c'est un remplacement instantané


4
C'est étrange, mais cela a résolu le problème sur OS X Mavericks pour moi. J'avais besoin de sudo pour les bibliothèques à l'échelle du système.
Paul

2
merci elad, j'utilise 10.9.3 et j'ai la même erreur. merci un million
Özgür Fırat Özpolat

4
Je l'avais installé avec pip, qui ne fonctionnait pas, puis easy_install, qui ne fonctionnait pas non plus. (Ceci est sur Windows.) Il suffit de le désinstaller avec pip comme vous l'avez suggéré pour le faire fonctionner. Je n'aurais jamais pensé faire ça dans un million d'années. Je vous remercie.
user124384

6
Cela sauve toujours la mise sur El Capitan.
non

2
Quelqu'un peut-il expliquer pourquoi cela fonctionne? (sur OSX 10.11.4 avec python de homebrew)
Gabe Kopley

102

J'ai rencontré cela sur Mac également, et cela semble être lié au fait d'avoir un module "crypto" malheureusement nommé de la même manière (je ne sais pas à quoi cela sert) installé à côté de pycrypto via pip.

Le correctif semble supprimer à la fois crypto et pycrypto avec pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

et réinstaller pycrypto:

sudo pip install pycrypto

Maintenant, cela fonctionne comme prévu lorsque je fais quelque chose comme:

from Crypto.Cipher import AES

Idem pour moi dans Windows + Vagrant avec Ubuntu 14.04 64 bits et Python3
Juha Untinen

Cela fonctionne sauf que dans un virtualenv, n'utilisez pas sudo
Michael Robellard

31

Sur le mac ... si vous rencontrez cela ... essayez de voir si vous pouvez importer du crypto à la place?

Si oui .. le nom du paquet est la question Cvs c. Pour contourner ce problème ... ajoutez simplement ces lignes en haut de votre script.

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

Vous savez que vous devriez pouvoir importer paramiko avec succès.


Ce n'est pas correct, lisez un peu ici: pycryptodome.readthedocs.io/en/latest/src/…
Igor Micev



23

AVERTISSEMENT: ne pycryptoplus utiliser !

Comme vous pouvez le lire sur cette page , l'utilisation de pycrypton'est plus sûre:

Pycrypto est vulnérable à un débordement de tampon basé sur le tas dans la fonction ALGnew dans block_templace.c. Il permet aux attaquants distants d'exécuter du code arbitraire dans l'application python. Il a reçu le numéro CVE-2013-7459 .

Pycrypto n'a publié aucun correctif à cette vulnérabilité et aucun commit n'a été effectué sur le projet depuis le 20 juin 2014.

SOLUTION: utilisez Python3 et pycryptodome!

TL; DR: pip3 install pycryptodome

Assurez-vous de désinstaller d'abord les autres versions de cryptoou pycrypto.

Mettre en place un nouvel environnement virtuel

Pour installer un environnement virtuel et tout configurer, utilisez les commandes suivantes:

# 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

Pour plus d'informations, consultez pycryptodome.org


1
Si vous avez actuellement des installations de crypto ou de pycrypto, vous devez d'abord les désinstaller.
Gino Mempin

21

J'ai trouvé la solution. Le problème est probablement lié au respect de la casse (sous Windows).

Changez simplement le nom du dossier:

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

Voici comment le dossier a été nommé après l'installation de pycrypto: entrez la description de l'image ici

Je l'ai changé en: entrez la description de l'image ici

Et maintenant, le code suivant fonctionne correctement: entrez la description de l'image ici


Cela fonctionne, mais il y a trop de paquets à l'intérieur, tous doivent être renommés.
user1288329


8

si vous utilisez redhat, fedora, centos:

sudo yum install pycrypto

pour mon cas, je ne pourrais pas l'installer en utilisant pip


Ce nom de package référencé ne semble plus exister sur yum? "pycrypto"
k1DBLITZ

8

J'ai eu le même problème 'ImportError: No module named Crypto.Cipher', depuis que j'utilise GoogleAppEngineLauncher (version> 1.8.X) avec GAE Boilerplate sur OSX 10.8.5 (Mountain Lion). Dans le SDK Google App Engine avec l'environnement d'exécution python 2.7, pyCrypto 2.6 est la version suggérée. La solution qui a fonctionné pour moi était ...

1) Téléchargez la source pycrypto2.6 extrayez-la quelque part ( ~/Downloads/pycrypto26)

par exemple, git clone https://github.com/dlitz/pycrypto.git

2) cd( cd ~/Downloads/pycrypto26) puis

3) Exécutez la commande de terminal suivante dans le dossier précédent afin d'installer pyCrypto 2.6 manuellement dans le dossier GAE.

sudo python setup.py install --install-lib /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine

1
la question du PO a à voir avec Windows et non OSX
gldraphael

Il peut être utile de noter que l'installation à la racine du projet fonctionnera également (quelle que soit la plate-forme)
ocodo

C'est une excellente réponse pour les utilisateurs de yosemite!
KyungHoon Kim

@Lazaros Dinakis: C'est la solution qui a fonctionné .. de toutes les solutions mentionnées dans cette page. Merci
gaurav414u

cette réponse l'a résolu pour moi sur mac OSX Yosemite 10.10.5. La seule chose est que l'installation a échoué avec des erreurs pour moi. j'ai donc copié manuellement la bibliothèque Crypto de ma bibliothèque python dans la bibliothèque google_appengine. et maintenant ça marche.
Boaz Saragossi

7

Si vous utilisez un macos, renommez le dossier lib lib/python3.7/site-packages/cryptoenlib/python3.7/site-packages/Crypto


Celui-ci a fonctionné pour moi par opposition à d'autres solutions. Je suis sur MacOs
user3527975 le

Enterré ici est la solution qui a fonctionné pour moi (sur Windows 10)
Joseph



3

A travaillé pour moi (Ubuntu 17.10)

Supprimer venv et le créer à nouveau avec 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 est obsolète, a eu des problèmes avec lui, a utilisé Pycryptodome


2

Je résous ce problème en changeant la première lettre majuscule en majuscule. Assurez-vous que «» depuis Crypto.Cipher importe AES «» pas «depuis crypto.Cipher import AES».


2

Pour CentOS 7.4, j'ai d'abord installé pip, puis pycrypto à l'aide de pip:

> sudo yum -y install python-pip 
> sudo python -m pip install pycrypto

2

À ce jour, j'ai le même problème lors de l'importation from Crypto.Cipher import AESmême si j'ai installé / réinstallé pycrypto à plusieurs reprises. Finalement, c'est parce que pip est par défaut python3.

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

l'installation de pycrypto avec pip2 devrait résoudre ce problème.


1

Pour Windows 7:

J'ai traversé cette erreur "Erreur de module Crypo.Cipher import AES"

Pour installer Pycrypto sous Windows,

Essayez ceci dans l'invite de commande,

Set path = C: \ Python27 \ Scripts (c'est-à-dire le chemin où se trouve easy_install)

Puis exécutez ce qui suit,

easy_install pycrypto

Pour Ubuntu:

Essaye ça,

Téléchargez Pycrypto depuis " https://pypi.python.org/pypi/pycrypto "

Puis changez votre chemin actuel vers le chemin téléchargé à l'aide de votre terminal:

Par exemple: root @ xyz-virtual-machine: ~ / pycrypto-2.6.1 #

Exécutez ensuite les opérations suivantes à l'aide du terminal:

installation de python setup.py

Cela a fonctionné pour moi. L'espoir fonctionne pour tous.



1

Peut-être devriez-vous ceci: pycryptodome == 3.6.1 l'ajouter à requirements.txt et installer, ce qui devrait éliminer le rapport d'erreur. ça marche pour moi!



1

Eh bien cela peut paraître bizarre , mais après avoir installé pycryptoou pycryptodome, nous avons besoin de mettre à jour le nom du répertoire cryptoà Cryptoenlib/site-packages

Référence


0

Je suis avec 3.7. Le problème persiste après avoir essayé d'installer crypto. Et pycrypto échoue dans mon cas. Donc à la fin ma construction est passée via le package ci-dessous: pip install pycryptodome

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.