ImportError: No module named Crypto.Cipher
Categories:
Resolving 'ImportError: No module named Crypto.Cipher' in Python

This article provides comprehensive solutions and best practices for fixing the common 'ImportError: No module named Crypto.Cipher' error when working with PyCryptodome or PyCrypto in Python environments, especially within virtualenvs.
The ImportError: No module named Crypto.Cipher
is a frequently encountered issue for Python developers working with cryptographic functionalities. This error typically arises when the PyCryptodome
or older PyCrypto
library is not correctly installed or accessible within your Python environment. This guide will walk you through the common causes and provide robust solutions, focusing on proper installation, virtual environment management, and distinguishing between the two related libraries.
Understanding the Cause: PyCrypto vs. PyCryptodome
The root of this error often lies in the confusion between two Python cryptographic libraries: PyCrypto
and PyCryptodome
.
- PyCrypto: This is the older, no longer maintained library. While many legacy projects might still depend on it, its development has ceased, and it has known security vulnerabilities.
- PyCryptodome: This is the actively maintained successor to
PyCrypto
. It provides the same API compatibility (meaningfrom Crypto.Cipher import AES
will work) but includes security fixes, new features, and better performance. It's designed to be a drop-in replacement.
The ImportError
usually means that neither of these libraries, or specifically PyCryptodome
(which is the recommended one), is properly installed in the Python environment where your script is being executed.
flowchart TD A[Python Script Execution] --> B{Import Crypto.Cipher?} B -- Yes --> C{PyCryptodome Installed?} C -- Yes --> D[Success: Module Found] C -- No --> E[Error: ImportError] B -- No --> F[Other Imports] E --> G{Check Installation} G --> H[Install PyCryptodome] H --> I[Retry Script]
Flowchart illustrating the module import process and error path.
Installation and Virtual Environment Best Practices
Proper installation, especially within a virtual environment, is crucial for avoiding module import errors. Virtual environments isolate your project's dependencies, preventing conflicts between different projects and ensuring reproducibility. Always activate your virtual environment before installing packages.
1. Create a Virtual Environment
Navigate to your project directory and create a new virtual environment. This isolates your project's dependencies.
2. Activate the Virtual Environment
Before installing any packages, activate the virtual environment. The command varies slightly based on your operating system.
3. Install PyCryptodome
Use pip
to install pycryptodome
. This is the recommended and actively maintained library. It provides the Crypto
namespace.
4. Verify Installation
After installation, you can quickly verify that the module is accessible within your activated virtual environment.
Linux / macOS
# Create virtual environment
python3 -m venv venv
# Activate virtual environment
source venv/bin/activate
# Install PyCryptodome
pip install pycryptodome
# Verify installation
python -c "from Crypto.Cipher import AES; print('PyCryptodome installed successfully!')"
Windows
# Create virtual environment
python -m venv venv
# Activate virtual environment
.\venv\Scripts\activate
# Install PyCryptodome
pip install pycryptodome
# Verify installation
python -c "from Crypto.Cipher import AES; print('PyCryptodome installed successfully!')"
pycrypto
(the old, unmaintained library) if possible. If a legacy project explicitly requires it, be aware of potential security risks and consider migrating to pycryptodome
.Troubleshooting Common Scenarios
Even with correct installation steps, issues can sometimes arise. Here are a few common scenarios and their solutions.
Scenario 1: Multiple Python Installations
If you have multiple Python versions installed on your system, ensure you are using the pip
command associated with the Python interpreter you intend to use for your project. Using python3 -m pip install pycryptodome
is generally safer as it explicitly links pip
to python3
.
which python
which pip
python -m pip install pycryptodome
Commands to check Python and pip paths and ensure correct installation.
Scenario 2: Conflicting Installations
Sometimes, both pycrypto
and pycryptodome
might be installed, leading to unexpected behavior or import errors. It's best to uninstall the older pycrypto
if you are using pycryptodome
.
pip uninstall pycrypto
pip install pycryptodome
Uninstalling pycrypto and installing pycryptodome.
Scenario 3: IDE/Editor Environment Issues
If you're using an IDE like VS Code, PyCharm, or Sublime Text, ensure that your IDE is configured to use the correct Python interpreter and virtual environment where pycryptodome
is installed. Often, IDEs default to a system-wide Python, ignoring your activated virtual environment.
File > Settings > Project: [Your Project Name] > Python Interpreter
and select the interpreter from your virtual environment. In VS Code, use the Python: Select Interpreter
command from the Command Palette (Ctrl+Shift+P
or Cmd+Shift+P
).