{}const=>[]async()letfn</>var
PythonПрактикаОсновы

Ошибка No module named: почему Python не видит библиотеку

Определим отсутствующий модуль, сверим sys.executable и pip, проверим IDE, виртуальное окружение и структуру собственного пакета без случайного sys.path.append.

К

Кодик

Автор

6 мин чтения

ModuleNotFoundError означает, что текущий Python не нашёл модуль с именем из последней строки traceback. Сначала выведите sys.executable, затем проверьте пакет командой этого же интерпретатора через python -m pip show ИМЯ. Ниже разберём четыре главные причины: библиотека не установлена, пакет попал в другой Python, неверно написан импорт или собственный файл лежит вне пути поиска.

Ошибка выглядит одинаково, но исправляется по-разному. Для No module named 'requests' обычно нужна установка пакета. Для No module named 'app.utils' важнее структура проекта и способ запуска. А если импорт падает только в IDE, почти наверняка терминал и редактор выбрали разные интерпретаторы.

1Прочитать имя

Последняя строка traceback показывает модуль, на котором остановился импорт.

2Сверить Python

sys.executable показывает интерпретатор, который действительно выполняет файл.

3Найти источник

pip show и find_spec отличают отсутствующий пакет от ошибки структуры.

Что означает ModuleNotFoundError

Во время import Python ищет уже загруженный модуль, встроенные модули и доступные каталоги. Список каталогов хранится в sys.path: туда входят папка запускаемого скрипта, стандартная библиотека, site-packages текущего окружения и некоторые настройки среды. Если подходящего модуля нет, возникает ModuleNotFoundError.

СообщениеОбычно означаетПервая проверка
No module named 'requests'Пакет не установлен в текущий Pythonpython -m pip show requests
No module named 'app'Проект запущен не из того местаРабочая папка и команда запуска
No module named 'app.utils'Есть app, но нет подмодуля utilsИмя файла и структура пакета
Работает в терминале, не работает в IDEВыбраны разные интерпретаторыsys.executable в обоих местах
Ошибка после создания requests.pyЛокальный файл затенил библиотекуИмя собственного файла

Схема поиска Python-модуля через кэш, встроенные модули и каталоги sys.path до ModuleNotFoundError
Python не ищет библиотеку по всему диску. Он проверяет только известные источники и каталоги текущего окружения.

Не исправляйте импорт вслепую

Сначала определите, какое имя не найдено и какой Python выполняет код. Установка десятка пакетов не поможет, если программа запущена другим интерпретатором или импорт относится к вашему файлу.

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

Библиотека не установлена в текущий Python

Пакеты из PyPI устанавливаются в site-packages конкретного интерпретатора. Поэтому команда pip install requests может сработать, а import requests продолжит падать, если pip относится к другому Python. Надёжная форма связывает установщик и интерпретатор через -m.

Проверьте библиотеку на одном интерпретаторе
  1. В терминале проекта выведите путь командой python -c "import sys; print(sys.executable)". На Windows можно использовать py вместо python.
  2. Проверьте пакет: python -m pip show requests.
  3. Если вывод пустой и есть предупреждение Package not found, установите библиотеку через python -m pip install requests.
  4. Проверьте импорт командой python -c "import requests; print(requests.__file__)".
  5. Запустите свой файл тем же словом 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 вашего проекта.
Этап пройден. Короткая команда импортирует библиотеку без traceback и показывает её реальное расположение.

Если 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.

Сравнение установки пакета в Python A и запуска проекта через Python B, который не видит библиотеку
Библиотека установлена, но не для того интерпретатора: это самая частая причина ошибки только в IDE.

СредаГде выбрать PythonКак проверить
VS CodePython: Select InterpreterЗапустить sys.executable во встроенном терминале
PyCharmProject, 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.

Изменение sys.path в каждой программе

Ручной append временно скрывает проблему. Лучше исправить структуру, рабочую папку и способ запуска.

Алгоритм исправления по последней строке traceback

Читайте traceback снизу вверх. Последняя строка сообщает тип ошибки и первое имя, которое Python не смог найти. Затем определите, относится оно к сторонней библиотеке, вашему пакету или вложенному модулю. После каждой правки запускайте одну короткую команду импорта, а не всё приложение.

Алгоритм исправления ModuleNotFoundError: определить имя, тип модуля, интерпретатор и структуру проекта
Правильная ветка зависит не от текста import, а от того, где должен находиться отсутствующий модуль.

Пять шагов диагностики
  1. Скопируйте имя после No module named без кавычек.
  2. Выведите sys.executable в том же месте, где возникает ошибка.
  3. Для внешней библиотеки выполните python -m pip show ИМЯ_ПАКЕТА и при необходимости установите её этим же Python.
  4. Для собственного модуля проверьте имя файла, структуру папок и запуск из корня через python -m.
  5. Запустите python -c "import ИМЯ". Только после успешной короткой проверки возвращайтесь к приложению.
Финальный чек-лист. Имя импорта написано точно, пакет установлен в sys.executable текущего проекта, IDE выбрала тот же interpreter, собственные файлы не затеняют библиотеку, а запуск выполняется из корня пакета.
Короткие ответы
Что значит 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, функции и структуру программ без борьбы с локальной настройкой. После этого вернитесь к своему проекту и повторите диагностику уже осознанно.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты