#Что произошло и когда проявляется ошибка
ModuleNotFoundError после переключения виртуального окружения чаще означает, что скрипт запускается не тем Python либо нужная зависимость установлена в другое окружение.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Окружение не активированоКоманда python использует системный интерпретатор. | В приглашении нет имени окружения; sys.prefix равен sys.base_prefix | Запустить Python из каталога нужного venv. |
| Пакет установлен в соседний venvКаждое виртуальное окружение имеет собственный набор пакетов. | В одном терминале import работает, в другом нет | Устанавливать зависимости через -m pip конкретного интерпретатора. |
| Запуск редактором в обход терминалаРедактор хранит собственный путь интерпретатора. | Терминал работает, кнопка Run даёт ModuleNotFoundError | Выбрать интерпретатор проекта в редакторе. |
#Подробная пошаговая диагностика и исправление
- 1. Выясните, какой Python реально выполняет скриптОткройте терминал в папке проекта. Введите следующую команду; она выведет путь к Python и два префикса. Если
prefix == base_prefix, окружение не используется. Проверьте также, есть ли.venv/Scripts/python.exeв Windows или.venv/bin/pythonв Linux/macOS.Linux · Терминал (Bash)КомандаВ Windows используйте python или py -3 с учётом способа установки.python -c "import sys; print(sys.executable); print(sys.prefix); print(sys.base_prefix)"
- 2. Запустите именно Python из нужного окруженияНе полагайтесь на название
pipв PATH. Из корня проекта в PowerShell выполните.\.venv\Scripts\python.exe -m pip --version, в Linux/macOS —./.venv/bin/python -m pip --version. Существование папки.venvне означает правильную настройку редактора. - Для Linux/macOSLinux · Терминал (Bash)КомандаДля Linux/macOS. Windows: .\.venv\Scripts\python.exe -m pip --version в PowerShell.
./.venv/bin/python -m pip --version
- 3. Проверьте наличие нужного пакетаДля имени пакета из ошибки замените
requestsна реальное имя устанавливаемого дистрибутива. Сначала выполните... -m pip show requests; если пакет отсутствует, ставьте его в нужное окружение после проверки файла зависимостей. Имя импорта иногда отличается от имени пакета в pip. - Linux/macOS, без sudo; на Windows используйте путь .venv\Scripts\python.exeLinux · Терминал (Bash)КомандаLinux/macOS, без sudo; на Windows используйте путь .venv\Scripts\python.exe.
./.venv/bin/python -m pip show requests./.venv/bin/python -m pip install requests
- 4. Проверьте импорт в том же интерпретатореПосле установки запустите непосредственный импорт с помощью полного пути; появление имени файла библиотеки подтверждает, что импорт найден. Если импорт продолжает падать, прочитайте весь текст исключения — ошибка может быть во вложенной зависимости, а не в верхнем пакете.
- Подставьте реальный пакет; команда не загружает данные из сетиLinux · Терминал (Bash)КомандаПодставьте реальный пакет; команда не загружает данные из сети.
./.venv/bin/python -c "import requests; print(requests.__file__)"
- 5. Согласуйте запуск в редактореВ VS Code откройте папку проекта и выполните команду палитры
Python: Select Interpreter, затем выберите путь из первого шага. В другой среде разработки найдите параметр интерпретатора проекта; названия настроек различаются. Перезапустите отладку и сравнитеsys.executable.
#Как проверить, что проблема устранена
В той же среде, из которой запускается приложение, импорт проходит без ошибки и sys.executable указывает на нужное окружение.
#Если исправление не помогло
Если обнаружена ошибка внутри пакета, проверьте совместимость версий библиотек и Python по документации конкретного пакета; переустановка без выяснения причины может усложнить диагностику.