Python: как исправить ошибку 'No module named crypto' — полное руководство
-
Ошибка No module named ‘Crypto’ в Python знакома многим разработчикам, кто работает с шифрованием. Она возникает при попытке импортировать модуль из библиотеки Crypto, например,
from Crypto.Cipher import AES. Это мешает запускать код для криптографии.В этой статье разберём, почему появляется ошибка и как её исправить раз и навсегда. Вы узнаете про установку нужных пакетов, виртуальные окружения и распространённые ловушки. После этого ваш код заработает без проблем, и вы сможете использовать AES и другие инструменты шифрования.
Почему возникает ошибка ‘No module named Crypto’
Ошибка ModuleNotFoundError: No module named ‘Crypto’ значит, что Python не может найти модуль Crypto в вашем окружении. Обычно это происходит из-за отсутствия библиотеки pycryptodome, которая предоставляет этот модуль. Раньше существовала устаревшая pycrypto, но она заменена на pycryptodome для лучшей совместимости и безопасности.
Представьте: вы пишете скрипт для шифрования данных, запускаете
from Crypto.PublicKey import RSA— и бац, ошибка. Это типично для новичков или при смене окружения. Ещё одна причина — конфликт с пакетом crypto, который ставится случайно и мешает настоящему модулю. На Windows это особенно актуально из-за нечувствительности к регистру файловой системы.Основные причины ошибки
- Отсутствие установки: Библиотека pycryptodome просто не установлена в текущем Python.
- Конфликт версий: Установлен pycrypto или crypto вместо pycryptodome.
- Неправильное окружение: Пакет стоит глобально, а код идёт в виртуальном venv.
Шаг 1: Правильная установка pycryptodome
Сначала проверьте, что у вас стоит. Запустите
pip list | grep crypto(на Linux/Mac) илиpip listв Windows и поищите crypto. Если ничего нет или стоит старый crypto — удалите его. Основное решение — установить pycryptodome через pip.Команда простая: откройте терминал или командную строку, убедитесь, что используете нужный Python (python3 или python), и выполните установку. После этого перезапустите IDE или скрипт — ошибка обычно уходит. Но если вы в виртуальном окружении, активируйте его сначала.
Пошаговая инструкция установки
- Активируйте виртуальное окружение:
source venv/bin/activate(Linux/Mac) илиvenv\Scripts\activate(Windows). - Удалите конфликты:
pip uninstall crypto pycrypto -y. - Установите правильный пакет:
pip install pycryptodome. - Проверьте:
python -c "from Crypto.Cipher import AES; print('OK')".
ОС Команда установки Проверка Windows pip install pycryptodomepip show pycryptodomemacOS/Linux pip3 install pycryptodomepython3 -c "import Crypto"В venv Сначала source venv/bin/activateИмпорт в скрипте Важно: Всегда используйте
pipот того же Python, что и ваш интерпретатор. Проверьте черезwhich pythonилиwhere python.Шаг 2: Работа с виртуальными окружениями и конфликтами
Часто ошибка держится, потому что пакет стоит не там. Если вы используете VS Code, PyCharm или Jupyter — они могут хватать глобальный Python вместо venv. Ещё ловушка: файл crypto.py в проекте перекрывает библиотеку, или переменная Crypto в коде.
Создайте новое виртуальное окружение для проекта: это изолирует зависимости. Установите pycryptodome внутрь, и код полетит. В requirements.txt добавьте
pycryptodome==3.23.0для фиксации версии. На серверах вроде Yocto или embedded-систем добавьте путь в sys.path.Частые проблемы и решения
- Неправильный Python:
python --versionvs pip для другого.
Решение:python -m pip install pycryptodome. - Файл crypto.py: Переименуйте свой скрипт.
- IDE берёт не тот интерпретатор: В VS Code Ctrl+Shift+P → “Python: Select Interpreter”.
- Конфликт с pycrypto:
pip uninstall pycrypto.
Если на Ubuntu 22.04 apt не ставит python3-crypto, переходите на pip и
pip install pycryptodome. Для совместимости иногда меняют импорт наfrom Cryptodome.Cipher import AES.Шаг 3: Проверка и тестирование после установки
После установки протестируйте импорт в простом скрипте. Создайте test_crypto.py с базовым использованием AES — если работает, проблема решена. Не забудьте: pycryptodome поддерживает Python 3.7+, для старых версий ищите альтернативы.
В больших проектах добавьте в Dockerfile или requirements: это автоматизирует деплой. Если ошибка в Streamlit или Flask — перезапустите сервер после pip.
Тестовый код для проверки
from Crypto.Cipher import AES from Crypto.Random import get_random_bytes key = get_random_bytes(16) cipher = AES.new(key, AES.MODE_EAX) print('Crypto работает!')Сценарий Ожидаемый результат Если не работает Базовый импорт Нет ошибок Проверьте venv AES-шифрование Ключ генерируется Обновите pip В Jupyter %pip install Перезагрузите kernel Практические нюансы криптографии в Python
Теперь, когда ошибка исправлена, подумайте о безопасности. pycryptodome — это форк pycrypto с фиксами уязвимостей, используйте его для продакшена. Избегайте устаревших методов вроде ECB — всегда MODE_EAX или GCM.
Есть альтернативы: cryptography для высокоуровневого API или cryptodome с префиксом Cryptodome. В IoT-проектах вроде NXP i.MX добавляйте зависимости в build-скрипты.
Когда простая установка не спасает
Даже после pip ошибка может остаться из-за системных ограничений или оптимизаций Python (-O флаг ломает pycparser). В таких случаях удалите cffi и используйте ctypes. Или fallback на python-cryptography.
Останавливайтесь на проверенных версиях: 3.20+ стабильны. Если проект на нескольких Python — тестируйте в CI/CD с tox. Это сохранит время на проде.
© 2024 - 2026 ExLends, Inc. Все права защищены.