ModuleNotFoundError означает, что текущий Python не нашёл модуль с именем из последней строки traceback. Сначала выведите sys.executable, затем проверьте пакет командой этого же интерпретатора через python -m pip show ИМЯ. Ниже разберём четыре главные причины: библиотека не установлена, пакет попал в другой Python, неверно написан импорт или собственный файл лежит вне пути поиска.
Ошибка выглядит одинаково, но исправляется по-разному. Для No module named 'requests' обычно нужна установка пакета. Для No module named 'app.utils' важнее структура проекта и способ запуска. А если импорт падает только в IDE, почти наверняка терминал и редактор выбрали разные интерпретаторы.
Последняя строка traceback показывает модуль, на котором остановился импорт.
sys.executable показывает интерпретатор, который действительно выполняет файл.
pip show и find_spec отличают отсутствующий пакет от ошибки структуры.
Что означает ModuleNotFoundError
Во время import Python ищет уже загруженный модуль, встроенные модули и доступные каталоги. Список каталогов хранится в sys.path: туда входят папка запускаемого скрипта, стандартная библиотека, site-packages текущего окружения и некоторые настройки среды. Если подходящего модуля нет, возникает ModuleNotFoundError.
| Сообщение | Обычно означает | Первая проверка |
|---|---|---|
No module named 'requests' | Пакет не установлен в текущий Python | python -m pip show requests |
No module named 'app' | Проект запущен не из того места | Рабочая папка и команда запуска |
No module named 'app.utils' | Есть app, но нет подмодуля utils | Имя файла и структура пакета |
| Работает в терминале, не работает в IDE | Выбраны разные интерпретаторы | sys.executable в обоих местах |
| Ошибка после создания requests.py | Локальный файл затенил библиотеку | Имя собственного файла |

Python не ищет библиотеку по всему диску. Он проверяет только известные источники и каталоги текущего окружения.
Сначала определите, какое имя не найдено и какой Python выполняет код. Установка десятка пакетов не поможет, если программа запущена другим интерпретатором или импорт относится к вашему файлу.
Библиотека не установлена в текущий Python
Пакеты из PyPI устанавливаются в site-packages конкретного интерпретатора. Поэтому команда pip install requests может сработать, а import requests продолжит падать, если pip относится к другому Python. Надёжная форма связывает установщик и интерпретатор через -m.
- В терминале проекта выведите путь командой
python -c "import sys; print(sys.executable)". На Windows можно использоватьpyвместо python. - Проверьте пакет:
python -m pip show requests. - Если вывод пустой и есть предупреждение Package not found, установите библиотеку через
python -m pip install requests. - Проверьте импорт командой
python -c "import requests; print(requests.__file__)". - Запустите свой файл тем же словом
python, которое использовали в проверке.
python -c "import sys; print(sys.executable)"
python -m pip show requests
python -m pip install requests
python -c "import requests; print(requests.__file__)"
python main.py- Путь
sys.executableуказывает на Python проекта или его.venv. - Строка Location из pip show относится к site-packages того же окружения.
requests.__file__показывает файл внутри ожидаемой папки, а не случайный requests.py вашего проекта.
Если pip на Windows не запускается отдельной командой, используйте py -m pip. Эта форма запускает установщик как модуль выбранного Python и не зависит от отдельного ярлыка pip.exe в PATH.
Терминал и IDE используют разные окружения
VS Code, PyCharm, Jupyter и обычный терминал могут запускать разные Python. У каждого собственный site-packages. Установка пакета в глобальный Python не делает его доступным в .venv, а пакет внутри .venv не появляется в остальных окружениях.
import sys
print("Python:", sys.executable)
print("Version:", sys.version)
print("Search path:")
for folder in sys.path:
print(" -", folder)Запустите этот файл из IDE и из обычного терминала. Если первая строка различается, выберите правильный interpreter в настройках проекта. Для виртуального окружения путь обычно заканчивается на .venv\Scripts\python.exe в Windows или .venv/bin/python в macOS и Linux.

Библиотека установлена, но не для того интерпретатора: это самая частая причина ошибки только в IDE.
| Среда | Где выбрать Python | Как проверить |
|---|---|---|
| VS Code | Python: Select Interpreter | Запустить sys.executable во встроенном терминале |
| PyCharm | Project, Python Interpreter | Сверить путь interpreter с .venv |
| Jupyter | Выбранный kernel | В ячейке вывести sys.executable |
| Терминал | Активированное окружение или явный путь | where python или which python |
Для каждого проекта полезно создавать отдельную .venv. Подробная схема есть в статье зачем нужны виртуальные окружения Python.
Python не видит ваш собственный модуль
Если импортируется ваш файл, устанавливать пакет из PyPI не нужно. Проверьте структуру проекта, рабочую папку и полное имя. При запуске скрипта Python добавляет его каталог в начало пути поиска. Родитель соседней папки может туда не попасть, если команда запущена из неожиданного места.
my-project/
├── app/
│ ├── __init__.py
│ ├── main.py
│ └── utils.py
└── tests/
└── test_utils.py# app/main.py
from app.utils import format_name
print(format_name("Кодик"))Для такой структуры перейдите в my-project и запускайте модуль командой python -m app.main. Тогда корень проекта попадает в путь поиска, а полный импорт app.utils читается одинаково. Запуск python app/main.py меняет стартовый контекст и часто маскирует ошибку структуры.
Импорт import request не относится к пакету requests. Скопируйте имя из официальной документации библиотеки.
Не называйте свои файлы requests.py, json.py, random.py или именем другой импортируемой библиотеки.
Перейдите в корень проекта и запускайте пакет через python -m package.module.
Ручной append временно скрывает проблему. Лучше исправить структуру, рабочую папку и способ запуска.
Алгоритм исправления по последней строке traceback
Читайте traceback снизу вверх. Последняя строка сообщает тип ошибки и первое имя, которое Python не смог найти. Затем определите, относится оно к сторонней библиотеке, вашему пакету или вложенному модулю. После каждой правки запускайте одну короткую команду импорта, а не всё приложение.

Правильная ветка зависит не от текста import, а от того, где должен находиться отсутствующий модуль.
- Скопируйте имя после
No module namedбез кавычек. - Выведите
sys.executableв том же месте, где возникает ошибка. - Для внешней библиотеки выполните
python -m pip show ИМЯ_ПАКЕТАи при необходимости установите её этим же Python. - Для собственного модуля проверьте имя файла, структуру папок и запуск из корня через
python -m. - Запустите
python -c "import ИМЯ". Только после успешной короткой проверки возвращайтесь к приложению.
Что значит ModuleNotFoundError: No module named?
Текущий интерпретатор Python не нашёл указанный модуль среди загруженных, встроенных и доступных каталогов пути поиска.
Как установить отсутствующий модуль?
Если это внешняя библиотека, используйте python -m pip install ИМЯ_ПАКЕТА. На Windows часто удобнее py -m pip.
Почему pip показывает пакет, а import не работает?
pip и программа могут относиться к разным Python. Сравните путь из pip --version с sys.executable.
Как проверить, где Python ищет модули?
Выведите список sys.path. Для проекта важнее исправить interpreter и структуру, чем постоянно добавлять пути вручную.
Почему нельзя называть файл requests.py?
Локальный файл может затенить настоящую библиотеку requests. Python найдёт его раньше site-packages и импорт поведёт себя неожиданно.
Разберите как устроены модули и библиотеки Python, затем создайте виртуальное окружение для проекта. Для практики выберите одну из библиотек, подходящих новичку, и установите её в чистую .venv.
В курсе Python в Кодике можно закрепить import, функции и структуру программ без борьбы с локальной настройкой. После этого вернитесь к своему проекту и повторите диагностику уже осознанно.
