ModuleNotFoundError: No module named — как исправить в Python
Пошаговое руководство по устранению ошибки ModuleNotFoundError: No module named в Python: установка пакетов, виртуальные окружения, pip и версии Python.
Симптомы
- ModuleNotFoundError: No module named requests
- ImportError: No module named
- pip install не помогает, ошибка повторяется
- Модуль установлен, но Python его не видит
- Разные версии Python используют разные пакеты
Возможные причины
- Пакет не установлен в текущем окружении Python
- Используется неправильная версия Python (2 vs 3)
- Виртуальное окружение не активировано
- Пакет установлен глобально, но скрипт запущен в venv
- Конфликт имён: файл называется так же как модуль
Пошаговое решение
Проверьте версию Python и pip
Убедитесь, что pip привязан к нужной версии Python. Выполните python --version и pip --version. Если установлено несколько версий Python, используйте python3 и pip3. Вывод покажет путь к интерпретатору — убедитесь, что это тот Python, в который вы хотите установить пакет. Частая ошибка: pip устанавливает в Python 3.10, а скрипт запускается через Python 3.11.
python --version && pip --version Установите пакет через pip
Выполните pip install имя-пакета для установки. Если пакет уже установлен, pip выведет Requirement already satisfied. Попробуйте pip install --upgrade имя-пакета для обновления. Для установки конкретной версии: pip install имя-пакета==2.1.0. Если pip не найден, используйте python -m pip install имя-пакета — это гарантирует использование pip из нужного Python.
pip install requests Активируйте виртуальное окружение
Если вы работаете в виртуальном окружении, убедитесь, что оно активировано. На Linux/macOS: source venv/bin/activate. На Windows: venv\Scripts\activate. После активации в начале строки появится (venv). Пакеты, установленные без активации venv, будут недоступны внутри окружения. Создайте venv если его нет: python -m venv venv.
source venv/bin/activate Проверьте sys.path
Выполните python -c "import sys; print(sys.path)" для просмотра путей поиска модулей. Убедитесь, что директория с пакетом присутствует в списке. Если пакет установлен в site-packages другой версии Python, добавьте путь в PYTHONPATH: export PYTHONPATH=/path/to/packages. Также проверьте pip show имя-пакета — он покажет Location установки.
python -c "import sys; print(sys.path)" Устраните конфликт имён
Если ваш файл называется так же как устанавливаемый модуль (например, requests.py), Python будет импортировать ваш файл вместо пакета. Переименуйте файл:mv requests.py my_requests.py. Проверьте наличие файлов с такими именами в директории: ls *.py. Также удалите файлы __pycache__ и .pyc, если они есть — кешированные модули могут конфликтовать.
ls *.py Переустановите пакет с нуля
Если стандартная установка не помогает, удалите пакет полностью: pip uninstall имя-пакета -y. Затем очистите кеш: pip cache purge. Установите заново: pip install имя-пакета. Если пакет установлен из GitHub: pip install git+https://github.com/user/repo.git. Для development-установки: pip install -e . (из директории с setup.py).
pip uninstall requests -y && pip cache purge && pip install requests Проверьте requirements.txt
Если проект использует requirements.txt, установите все зависимости: pip install -r requirements.txt. Убедитесь, что в файле нет опечаток и версий, несовместимых с вашей версией Python. Для автоматической проверки совместимости: pip check. Еслиrequirements.txt содержит --index-url или --extra-index-url, убедитесь, что эти репозитории доступны.
pip install -r requirements.txt Ошибка ModuleNotFoundError — одна из самых частых в Python. Она означает, что интерпретатор не может найти указанный модуль при импорте. Причин несколько: пакет не установлен, установлен в другое окружение, конфликт имён файлов или неправильная версия Python.
Как проверить, установлен ли пакет
Выполните pip show имя-пакета. Если пакет установлен, pip покажет его версию, расположение и зависимости. Если вывода нет — пакет не установлен в текущем окружении. Также проверьте pip list для просмотра всех установленных пакетов. Обратите внимание на Location в выводе pip show — это покажет, в какой site-packages установлен пакет.
Почему pip install не помогает
Частая ситуация: pip install requests выполняется успешно, но ошибка повторяется. Причина: pip установил пакет в Python 3.10, а скрипт запускается через Python 3.11. Решение: используйте python3 -m pip install для явного указания версии. Или проверьте, какой Python используется в вашем окружении: which python на Linux/macOS, where python на Windows.
Проверка состояния пакетов
Выполните sudo apt —fix-broken install (Debian/Ubuntu) или sudo dnf distro-sync (Fedora) для исправления сломанных зависимостей. Проверьте повреждённые пакеты: sudo dpkg —audit (Debian) или sudo rpm -Va (RHEL). Это покажет, какие файлы изменены или отсутствуют.
Очистка кеша
Очистите кеш пакетов: sudo apt clean (Debian) или sudo dnf clean all (Fedora). Удалите неиспользуемые зависимости: sudo apt autoremove. Это освободит место и устранит конфликты версий. Если ошибка в репозитории, проверьте /etc/apt/sources.list на наличие неверных URL.
Переустановка пакета
Для переустановки повреждённого пакета: sudo apt install —reinstall имя-пакета. Если пакет зависит от других повреждённых, переустановите их все. Проверьте версию: apt show имя-пакета. Убедитесь, что версия совместима с вашейОС.
Исправление ключей GPG
Если ошибка связана с подписью пакета (NO_PUBKEY), обновите ключи: sudo apt-key adv —keyserver keyserver.ubuntu.com —recv-keys КЛЮЧ. Или: sudo gpg —keyserver keyserver.ubuntu.com —recv КЛЮЧ. Для Fedora: sudo rpm —import /etc/pki/rpm-gpg/RPM-GPG-KEY-*.
Проверка репозиториев
Убедитесь, что репозитории доступны и не дублируются: apt-cache policy (Debian) или dnf repolist (Fedora). Отключите ненужные репозитории: sudo add-apt-repository —remove ppa:имя. Для Fedora: sudo dnf config-manager —set-disabled репозиторий. Конфликтующие репозитории — частая причина ошибок.
Источники
- stackoverflow.com — проверено 02.06.2026
- freecodecamp.org — проверено 02.06.2026
- stackoverflow.com — проверено 02.06.2026
- stackoverflow.com — проверено 02.06.2026