Модуль отсутствует при вызове python -m: диагностика и исправление

Раздел: Настройка -> Отладка и установка

Основные причины ошибки и главное решение

Как быстро найти и установить недостающий модуль?

Ошибка "python -m not found" (или ModuleNotFoundError) возникает, когда интерпретатор не может найти указанный модуль в своей области видимости. Самая частая причина – модуль не установлен. Исправляется это командой:

pip install <имя_модуля>

Python m not found (ошибка «python -m not found» (модуль не найден) в python)

Если используется несколько версий Python, уточните интерпретатор:

python3 -m pip install <имя_модуля>
python -m pip install <имя_модуля>

После установки выполните:

python -m <имя_модуля>

Типичная проблема: pip не найден

Если команда pip вызывает ошибку, установите его через:

python -m ensurepip --upgrade

Или используйте системный пакетный менеджер (apt, brew, choco).

Цель: гарантированно убедиться, что модуль присутствует в окружении, где запускается python -m.

Как проверить правильность имени модуля?

Иногда модуль устанавливается под именем, отличающимся от команды запуска. Например, библиотека beautifulsoup4 запускается как bs4. В таких случаях следует:

  • Посмотреть документацию модуля или его страницу на PyPI.
  • Выполнить
    pip show <имя_модуля>
    и сверить поле Name.
  • Попробовать импортировать модуль в интерактивном режиме:
    python -c "import <имя_модуля>"

Ошибка: модуль установлен, но его имя не совпадает

Пример: установлен Pillow, запуск python -m Pillow не работает. Правильное имя - PIL. Используйте:

python -m PIL

Что делать, если в системе несколько версий Python?

На многих ОС команда python может ссылаться на Python 2, а модули установлены для Python 3. Проверьте версию:

python --version
python3 --version

Используйте явный интерпретатор:

python3 -m имя_модуля
python3.10 -m имя_модуля

Также можно создать алиас или указать полный путь к интерпретатору.

Проблема: модуль установлен для одной версии, а запуск из другой

Решение: установить модуль повторно для нужной версии:

python3.8 -m pip install имя_модуля
Как активировать виртуальное окружение?

Если модуль установлен в виртуальном окружении (venv), но оно не активировано, python -m его не увидит. Активация:

# Windows
.\venv\Scripts\activate
# Linux/macOS
source venv/bin/activate

После активации запуск модуля:

python -m имя_модуля

Автоматическое использование окружения: можно прописать путь к интерпретатору из venv:

./venv/bin/python -m имя_модуля

Ошибка: venv создан, но модули установлены глобально

Установите модуль внутри окружения, не выходя из него:

pip install имя_модуля
Что делать при проблемах с путями PYTHONPATH?

Иногда модуль находится в нестандартной папке. Проверьте переменную окружения PYTHONPATH или site-packages:

python -c "import sys; print('\n'.join(sys.path))"

Если путь отсутствует, добавьте его временно:

export PYTHONPATH=/path/to/module:$PYTHONPATH  # Linux/macOS
set PYTHONPATH=/path/to/module;%PYTHONPATH%  # Windows

Постоянная настройка через .bashrc или переменные системы.

Проблема: модуль есть в site-packages, но не импортируется

Возможно повреждение кеша. Очистите __pycache__ или переустановите модуль:

pip install --force-reinstall имя_модуля

Расширенные примеры и их вывод

Как имитировать ошибку и исправить её пошагово?

Создадим ситуацию, когда модуль не найден, затем применим разные исправления.

Пример
# 1. Попытка запустить несуществующий модуль
$ python -m nonexistent_module
/usr/bin/python: No module named nonexistent_module

Установка модуля (если он существует в репозитории):

Пример
$ pip install nonexistent_module  # если модуль реальный
ERROR: Could not find a version that satisfies the requirement nonexistent_module
# Если модуля нет, выдаётся ошибка pip. В реальности модуль должен существовать.

Проверка списка установленных модулей:

Пример
$ pip list | grep -i nonexistent
# (пусто)
(нет вывода)

Установка корректного модуля, например, requests:

Пример
$ python -m pip install requests
Collecting requests
  ...
Successfully installed requests-2.31.0
# Теперь модуль доступен
$ python -m requests --help
usage: __main__.py [-h] ...

Как проверить, для какой версии Python установлен модуль?

Пример
$ python3.8 -m pip show requests
Name: requests
Version: 2.31.0
Location: /usr/lib/python3.8/site-packages

$ python3.10 -m pip show requests
WARNING: Package(s) not found: requests
Модуль установлен только для Python 3.8, запуск python3.10 -m requests выдаст ошибку.

Исправление через установку для нужной версии:

Пример
$ python3.10 -m pip install requests
Collecting requests
  ...
Successfully installed requests-2.31.0
Теперь модуль доступен обеим версиям.

Пример с виртуальным окружением и запуском без активации

Пример
$ python -m venv myenv
$ myenv/bin/pip install requests
$ python -m requests --help
/usr/bin/python: No module named requests
Ошибка, потому что модуль установлен внутри myenv, а вызывается системный python.

Исправления:

Пример
# 1. Активировать окружение
$ source myenv/bin/activate
$ python -m requests --help    # работает

# 2. Явно указать интерпретатор из окружения
$ ./myenv/bin/python -m requests --help   # работает
Оба способа устраняют ошибку.

Проблема с именем модуля: как найти правильное?

Пример
$ pip install beautifulsoup4
$ python -m beautifulsoup4
/usr/bin/python: No module named beautifulsoup4
Ошибка, хотя пакет установлен. Правильное имя для запуска - bs4.
Пример
$ python -m bs4
usage: __main__.py [-h] [--version] ...
# работает
Успешный запуск.

Восстановление повреждённого модуля

Пример
$ python -m pip install --force-reinstall requests
...
Successfully installed requests-2.31.0

# После переустановки ошибка исчезла.
Команда принудительно переустанавливает пакет, обновляя его файлы и метаданные.

Дополнительно: проверка путей при использовании переменной PYTHONPATH

Пример
$ mkdir my_modules
$ echo "def hello(): print('Hello')" > my_modules/mymod.py
$ python -m mymod
/usr/bin/python: No module named mymod
Ошибка, так как my_modules не в sys.path.
Пример
$ export PYTHONPATH=/home/user/my_modules:$PYTHONPATH
$ python -m mymod
Hello
После добавления пути модуль найден.

Ошибка «python -m not found» (модуль не найден) в Python - comments

En
Python m not found (python)