ImportError: No module named Crypto.Cipher

PythonVirtualenvPipEasy InstallPycrypto

Python Problem Overview


When I try to run app.py (Python 3.3, PyCrypto 2.6) my virtualenv keeps returning the error listed above. My import statement is just from Crypto.Cipher import AES. I looked for duplicates and you might say that there are some, but I tried the solutions (although most are not even solutions) and nothing worked.

You can see what the files are like for PyCrypto below:

Python Solutions


Solution 1 - Python

I had the same problem on my Mac when installing with pip. I then removed pycrypto and installed it again with easy_install, like this:

pip uninstall pycrypto
easy_install pycrypto

also as Luke commented: If you have trouble running these commands, be sure to run them as admin (sudo)

Hope this helps!

EDIT: As winklerr correctly notes above, pycrypto is no longer safe. Use pycryptodome instead, it is a drop-in replacement

Solution 2 - Python

I ran into this on Mac as well, and it seems to be related to having an unfortunately similarly named "crypto" module (not sure what that is for) installed alongside of pycrypto via pip.

The fix seems to be removing both crypto and pycrypto with pip:

sudo pip uninstall crypto
sudo pip uninstall pycrypto

and reinstalling pycrypto:

sudo pip install pycrypto

Now it works as expected when I do something like:

from Crypto.Cipher import AES

Solution 3 - Python

WARNING: Don't use crypto or pycrypto anymore!

As you can read on this page, the usage of pycrypto is not safe anymore:

> Pycrypto is vulnerable to a heap-based buffer overflow in the ALGnew function in block_templace.c. It allows remote attackers to execute arbitrary code in the python application. It was assigned the CVE-2013-7459 number. > > Pycrypto didn’t release any fix to that vulnerability and no commit was made to the project since Jun 20, 2014.

Update 2021-01-18

The CVE is fixed now (thanks @SumitBadsara for pointing it out!). You can find the current status of the open security tickets for each package at the Debian security tracker:

Use Python3's pycryptodome instead!

Make sure to uninstall all versions of crypto and pycrypto first, then install pycryptodome:

pip3 uninstall crypto 
pip3 uninstall pycrypto 
pip3 install pycryptodome

All of these three packages get installed to the same folder, named Crypto. Installing different packages under the same folder name can be a common source for errors!

For more information, see pycryptodome.org.

Best practice: virtual environments

In order to avoid problems with pip packages in different versions or packages that install under the same folder (i.e. pycrypto and pycryptodome) you can make use of a so called virtual environment. There, the installed pip packages can be managed for every single project individually.

To install a virtual environment and setup everything, use the following commands:

# 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

For more information, see docs.python-guide.org.

Solution 4 - Python

I had the same problem (though on Linux). The solution was quite simple - add:

libraries:
- name: pycrypto
  version: "2.6"

to my app.yaml file. Since this worked correctly in the past, I assume this is a new requirement.

Solution 5 - Python

I found the solution. Issue is probably in case sensitivity (on Windows).

Just change the name of the folder:

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

This is how folder was named after installation of pycrypto: enter image description here

I've changed it to: enter image description here

And now the following code works fine: enter image description here

Solution 6 - Python

On the mac... if you run into this.. try to see if you can import crypto instead?

If so.. the package name is the issue C vs c. To get around this.. just add these lines to the top of your script.

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

You know should be able to import paramiko successfully.

Solution 7 - Python

Uninstalling crypto and pycrypto works on me. Then install only pycrypto:

pip uninstall crypto 
pip uninstall pycrypto 
pip install pycrypto

Solution 8 - Python

type command:

sudo pip install pycrypto

Solution 9 - Python

If you an macos, rename lib folder lib/python3.7/site-packages/crypto to lib/python3.7/site-packages/Crypto

Solution 10 - Python

if you are using redhat,fedora, centos :

sudo yum install pycrypto

for my case I coouldnot install it using pip

Solution 11 - Python

I've had the same problem 'ImportError: No module named Crypto.Cipher', since using GoogleAppEngineLauncher (version > 1.8.X) with GAE Boilerplate on OSX 10.8.5 (Mountain Lion). In Google App Engine SDK with python 2.7 runtime, pyCrypto 2.6 is the suggested version. The solution that worked for me was...

  1. Download pycrypto2.6 source extract it somewhere(~/Downloads/pycrypto26)

e.g., git clone https://github.com/dlitz/pycrypto.git

  1. cd (cd ~/Downloads/pycrypto26) then

  2. Execute the following terminal command inside the previous folder in order to install pyCrypto 2.6 manually in GAE folder.

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

Solution 12 - Python

Well this might appear weird but after installing pycrypto or pycryptodome , we need to update the directory name crypto to Crypto in lib/site-packages

Reference

Solution 13 - Python

If you are using this module with Python3 and having trouble with import. try this.

pip uninstall crypto
pip uninstall pycryptodome
pip install pycryptodome

Good Luck!

Solution 14 - Python

It could be a problem of loading python modules installed via pip. Refer to this answer https://stackoverflow.com/questions/25276329/cant-load-python-modules-installed-via-pip-from-site-packages-directory and try something like

python -m pip install pycrypto

Solution 15 - Python

Worked for me (Ubuntu 17.10)

Removing venv and creating it again with 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 is deprecated, had problems with it, used Pycryptodome

Solution 16 - Python

This worked for me

pip install pycryptodome==3.4.3

Solution 17 - Python

I solve this problem by change the first letter case to upper. Make sure ''from Crypto.Cipher import AES'' not ''from crypto.Cipher import AES''.

Solution 18 - Python

Try with pip3:

sudo pip3 install pycrypto

Solution 19 - Python

For CentOS 7.4 I first installed pip and then pycrypto using pip:

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

Solution 20 - Python

To date, I'm having same issue when importing from Crypto.Cipher import AES even when I've installed/reinstalled pycrypto a few times. End up it's because pip defaulted to python3.

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

installing pycrypto with pip2 should solve this issue.

Solution 21 - Python

One more reminder if you still encounter this issue after uninstall crypto and pycrypto like this

pip3 uninstall crypto
pip3 uninstall pycrypto

Just check if there is a directory named crypto(lower case) in your site-packages under /usr/local/lib/python3.9/site-packages, make sure the python version your used and the right site-packages path, then remove the crypto directory, the try to install again.

Solution 22 - Python

Run the following codes in your terminal screen

pip uninstall crypto
pip uninstall pycryptodome
pip install pycryptodome

Solution 23 - Python

For Windows 7:

I got through this error "Module error Crypo.Cipher import AES"

To install Pycrypto in Windows,

Try this in Command Prompt,

Set path=C:\Python27\Scripts (i.e path where easy_install is located)

Then execute the following,

easy_install pycrypto

For Ubuntu:

Try this,

Download Pycrypto from "https://pypi.python.org/pypi/pycrypto"

Then change your current path to downloaded path using your terminal:

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

Then execute the following using the terminal:

python setup.py install

It's worked for me. Hope works for all..

Solution 24 - Python

This problem can be fixed by installing the C++ compiler (python27 or python26). Download it from Microsoft https://www.microsoft.com/en-us/download/details.aspx?id=44266 and re-run the command : pip install pycrypto to run the gui web access when you kill the process of easy_install.exe.

Solution 25 - Python

Maybe you should this: pycryptodome==3.6.1 add it to requirements.txt and install, which should eliminate the error report. it works for me!

Solution 26 - Python

simply delete your existing folder of pycrpto/pycryptodome-3.11.0 located at ..\Python\Python310\Lib\site-packages (if any..), then run pip install pycryptodome

Solution 27 - Python

I'm with 3.7. The issue remains after I try to install crypto. And pycrypto just fails in my case. So in the end my build passed via package below: pip install pycryptodome

Solution 28 - Python

I had simular problem and fixed it with the next command

sudo pip3 install py

Solution 29 - Python

I was facing same problem in django.I was getting error while importing:

from Crypto.Cipher import AES

then I installed pycryptodome and used below line and changed capital C to small c

from crypto.Cipher import AES

Solution 30 - Python

Even after installing Crypto i was getting below error

> python my_script.py
Traceback (most recent call last):
File "D:\gitworkspace\cloudtools\py\my_script.py", line 19, in <module>
from Crypto.Cipher import AES
ModuleNotFoundError: No module named 'Crypto'

Then in the post I found below command which solved this issue.
pip install pycryptodome

Solution 31 - Python

Not sure if this going to help anyone but I had the exact same issue trying to run: samrdump on Kali Linux.

after a lot of work (I checked similar issues on the repo here). I discovered that typing python3 instead of python (as python uses python2) solved the issue:

sudo python3 samrdump.py
sudo python3 smbclient.py

Solution 32 - Python

My solution seems to be strange but I used to run my file like this,

encrypt.py

Than I run it like that and it worked

python encrypt.py

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGraham SmithView Question on Stackoverflow
Solution 1 - Pythonelad silverView Answer on Stackoverflow
Solution 2 - Pythonuser42935View Answer on Stackoverflow
Solution 3 - PythonwinklerrrView Answer on Stackoverflow
Solution 4 - PythonPatrick JordanView Answer on Stackoverflow
Solution 5 - Pythondamian1baranView Answer on Stackoverflow
Solution 6 - PythonphoView Answer on Stackoverflow
Solution 7 - PythontthreetorchView Answer on Stackoverflow
Solution 8 - PythonruxmingView Answer on Stackoverflow
Solution 9 - PythonJackView Answer on Stackoverflow
Solution 10 - PythonhamedView Answer on Stackoverflow
Solution 11 - PythonLazaros DinakisView Answer on Stackoverflow
Solution 12 - PythonAB AbhiView Answer on Stackoverflow
Solution 13 - PythonAshok ShahView Answer on Stackoverflow
Solution 14 - Pythonuser666NView Answer on Stackoverflow
Solution 15 - PythonapplekateView Answer on Stackoverflow
Solution 16 - PythonSaad MirzaView Answer on Stackoverflow
Solution 17 - PythonZesheng LIView Answer on Stackoverflow
Solution 18 - PythonArthur RonconiView Answer on Stackoverflow
Solution 19 - PythonstuhpaView Answer on Stackoverflow
Solution 20 - PythonRyanView Answer on Stackoverflow
Solution 21 - PythonxfangboView Answer on Stackoverflow
Solution 22 - PythonisaView Answer on Stackoverflow
Solution 23 - PythonJayaPrakashView Answer on Stackoverflow
Solution 24 - Pythonuser8094201View Answer on Stackoverflow
Solution 25 - PythonimissyouView Answer on Stackoverflow
Solution 26 - PythonabhijeetThakurView Answer on Stackoverflow
Solution 27 - PythonQuansheng LiView Answer on Stackoverflow
Solution 28 - PythonGerryView Answer on Stackoverflow
Solution 29 - PythonHarry JohnView Answer on Stackoverflow
Solution 30 - PythonDarshan RView Answer on Stackoverflow
Solution 31 - PythonShifraSecView Answer on Stackoverflow
Solution 32 - PythonHouari BelgaidView Answer on Stackoverflow