#Что означает ошибка
Traceback (most recent call last): File "app.py", line 1, in <module> import requests ModuleNotFoundError: No module named 'requests'
Когда вы пишете import имя, Python ищет модуль по списку путей sys.path — в папке скрипта, стандартной библиотеке и каталоге site-packages того интерпретатора, который запущен. Если модуль нигде не нашёлся, возникает эта ошибка. Ключевое слово — «того»: на компьютере часто несколько Python и несколько виртуальных окружений, и пакет мог быть поставлен в другой.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Пакет просто не установленВы запускаете чужой код или новый проект и ещё не ставили зависимости. | Ошибка при первом запуске; python -m pip show имя-пакета ничего не находит. | Установите: python -m pip install имя-пакета или python -m pip install -r requirements.txt. |
Пакет установлен в другой интерпретатор или окружениеpip относится к одному Python, а программа запускается другим — например, системным вместо виртуального окружения или наоборот. | Команда pip install прошла успешно, но программа всё равно не находит модуль; в редакторе выбран другой интерпретатор. | Узнайте sys.executable и ставьте пакеты через тот-же-python -m pip (шаг 2). |
| Имя пакета отличается от имени модуляПри установке указывается имя пакета, а при импорте — имя модуля, и они часто не совпадают. | Пакет «установлен», но импорт cv2, PIL, yaml, sklearn или bs4 не работает. | Ставьте пакет по его реальному названию: opencv-python, Pillow, PyYAML, scikit-learn, beautifulsoup4. |
Локальный файл затеняет модульРядом со скриптом лежит файл или папка с тем же именем, что и нужная библиотека (например, random.py, requests.py). | Ошибки вида partially initialized module или импорт берёт не ту версию; в папке проекта есть одноимённый файл. | Переименуйте свой файл и удалите папку __pycache__ рядом с ним. |
| Собственный пакет не виден из места запускаИмпортируется ваш же модуль, но Python запущен из другого каталога, либо в папке пакета нет нужной структуры. | Импорт работает из корня проекта, а при запуске из другой папки или в IDE — нет. | Запускайте из корня проекта командой python -m пакет.модуль либо оформите проект как установимый пакет. |
#Пошаговая диагностика
- Прочитайте имя модуляПрочитайте сообщение
ModuleNotFoundError: No module named '...'до конца: запишите точное имя модуля, путь файла и команду запуска программы. Если сообщение содержит имя вродеrequests, это может быть отсутствующий пакет, неправильное окружение или ошибка импорта. Откройте проект в редакторе и проверьте написаниеimport: Python различает регистр символов. Если отсутствует модуль вашего проекта, его не нужно искать на PyPI — сначала проверьте структуру каталогов и способ запуска. - Узнайте, какой Python запущенВ том же терминале, откуда запускаете программу, выполните
python -c "import sys; print(sys.executable)"(Linux/macOS иногда нуженpython3). Вы увидите полный путь к исполняемому Python. Затем выполнитеpython -m pip --versionи сравните путь установки pip; для окружения.venvоба пути должны указывать на него. Если редактор запускает другой интерпретатор, в VS Code нажмите Ctrl+Shift+P → «Python: Select Interpreter» и выберите Python нужного виртуального окружения; повторите запуск. - Установите пакет тем же интерпретаторомЕсли действительно отсутствует внешняя библиотека, в терминале проекта с активным виртуальным окружением выполните
python -m pip install requests, заменивrequestsправильным названием пакета. При ошибкеexternally-managed-environmentсначала создайтеpython3 -m venv .venv, активируйте его и устанавливайте туда. Не запускайтеsudo pip install: так можно повредить системную установку. Проверьте наличие командойpython -m pip show requests, затемpython -c "import requests; print(requests.__version__)"— команда сработает лишь для этого конкретного модуля. Проверьте, не отличается ли название пакета от импортируемого модуля. Например, официальный пакет Pillow устанавливается какpython -m pip install Pillow, но импортируетсяfrom PIL import Image; OpenCV — пакетopencv-python, импортcv2. Уточняйте эту пару по документации производителя библиотеки и зависимостямrequirements.txt/pyproject.toml, а не по похожему названию из поисковой выдачи. Если пакет уже указан в проекте, устанавливайте согласованные зависимости через его штатный способ, а не случайную новую версию. - Проверьте соответствие имёнЕсли модуль найден, но импорт не работает, посмотрите папку проекта на наличие локальных файлов
requests.py,json.py,typing.pyили папки с именем импортируемого пакета. Они могут скрывать установленную библиотеку. Переименовывайте только собственный файл после проверки ссылок на него и сделайте резервную копию; не удаляйте каталоги Python и__pycache__целиком без понимания. С помощьюpython -c "import importlib.util; print(importlib.util.find_spec('requests'))"проверьте, откуда Python ожидает загрузить модуль (пример для requests). - Поищите затеняющие файлыЕсли ошибка относится к собственному модулю проекта, проверьте, что запускаете программу из правильной папки и пакетный импорт соответствует структуре проекта. Вместо прямого запуска файла внутри пакета иногда требуется
python -m имя_пакета.имя_модуляиз корневого каталога. Не добавляйте произвольные глобальные пути вPYTHONPATHи не копируйте файлы библиотек вsite-packagesради обхода ошибки. После исправления запустите исходный сценарий из той же среды и убедитесь, что тесты проходят; при новом исключении сохраните полный traceback.
#Шаги 2–3. Интерпретатор и установка
python -c "import sys; print(sys.executable)"python -m pip --version# Только если нужен пакет requests в активном окружении:python -m pip show requests#Виртуальное окружение для проекта
Чтобы зависимости разных проектов не смешивались, создавайте для каждого проекта отдельное окружение:
# Linux/macOS; в папке проекта:python3 -m venv .venv. .venv/bin/activatepython -m pip install -r requirements.txt# Windows PowerShell, в папке проекта:py -m venv .venv.venv\Scripts\python.exe -m pip install -r requirements.txt#Таблица частых несовпадений имён
| Импорт (модуль) | Установка (пакет pip) |
|---|---|
cv2 | opencv-python |
PIL | Pillow |
yaml | PyYAML |
sklearn | scikit-learn |
bs4 | beautifulsoup4 |
dotenv | python-dotenv |
#Как проверить результат
- Команда
python -c "import имя_модуля"завершается без ошибок. python -m pip show имя-пакетапоказывает версию и путь внутри нужного окружения.- Программа запускается тем же способом (из терминала и из редактора).
#Если не помогло
Выведите sys.path и убедитесь, что в нём есть каталог site-packages вашего окружения. Проверьте, не запускается ли скрипт планировщиком, службой или Docker-контейнером с другим окружением — там зависимости нужно устанавливать отдельно. Для больших проектов закрепляйте версии в requirements.txt и пересоздайте окружение с нуля, если оно давно «обросло» пакетами.