Глиф Учебники

ModuleNotFoundError: No module named

Справочник · Python · 2 минуты чтения

ModuleNotFoundError: No module named 'requests' значит, что Python, который запускает программу, не нашёл модуль с таким именем. Обычно пакет с этим модулем не поставлен или поставлен не в тот Python.

Если в сообщении имя вашего собственного файла (например, utils) или tkinter, pip не поможет — сразу смотрите разделы Модуль из своей папки и Модули, которых нет в pip.

Как исправить

Пробуйте по порядку, пока ошибка не пропадёт. Команды набирают в терминале — в командной строке Windows или в терминале Linux и macOS, а не в окне Python с приглашением >>> (как открыть терминал — в справке Как запустить файл .py).

  1. Поставить пакет в тот же Python

    Командная строка
    python -m pip install requests

    Вместо requests — имя из сообщения об ошибке. В Linux и macOS команда — python3 -m pip install requests. Запись python -m pip ставит пакет именно в тот Python, который запускается командой python.

    Программа запускается без ошибки — готово.

    Не помогло — дальше: «Проверить имя пакета»

  2. Проверить имя пакета

    В import пишется имя модуля, а в pip install — имя пакета, и они не всегда одинаковы:

    В программеСтавить
    import PILpip install pillow
    import cv2pip install opencv-python
    import bs4pip install beautifulsoup4
    import sklearnpip install scikit-learn
    import yamlpip install pyyaml
    import telebotpip install pyTelegramBotAPI
    import dotenvpip install python-dotenv
    import docxpip install python-docx

    Правильное имя пакета для установки обычно указано в документации библиотеки. Поставьте пакет под этим именем командой из шага 1.

    После установки под правильным именем ошибка пропала — готово.

    Не помогло — дальше: «Поставить пакет в тот Python, что запускает программу»

  3. Поставить пакет в тот Python, что запускает программу

    На компьютере бывает несколько Python: разные версии, Python внутри Thonny, виртуальные окружения. Узнать, какой именно запускает программу, можно, добавив в неё две строки:

    Python
    import sys
    
    print(sys.executable)

    Программа выведет полный путь к python.exe (в Linux — к python3). Поставьте пакет этим Python, указав путь целиком (вместо C:\путь\из\вывода\python.exe — путь, который вывела программа):

    Командная строка
    "C:\путь\из\вывода\python.exe" -m pip install requests

    Частые случаи:

    • VS Code запускает программу тем Python, который выбран как интерпретатор, — он виден в строке состояния внизу окна. Сменить его — команда Python: Select Interpreter (Ctrl+Shift+P, затем начать набирать название).
    • Thonny по умолчанию работает со своим встроенным Python. Ставьте пакеты через меню Tools → Manage packages.
    • Виртуальное окружение (.venv — отдельная папка со своим Python и своими пакетами) не активировано: пакет стоит в .venv, а программа запущена системным Python. Как работать с окружением — в справке Виртуальное окружение venv.

    Программа запускается без ошибки — пакет попал в нужный Python.

Модуль из своей папки

Если модуль — ваш собственный файл, например utils.py, он должен лежать в той же папке, что и файл программы, а в import его имя пишется без .py: import utils. Python ищет модули прежде всего в папке запущенной программы.

Модули, которых нет в pip

Некоторые модули входят в сам Python, но в Linux вынесены в отдельные пакеты системы. Самый частый — tkinter для окон и кнопок. В Ubuntu и Debian он ставится так:

Bash
sudo apt install python3-tk

Свой файл с именем модуля

Если файл программы называется так же, как модуль, — random.py, requests.py, telebot.py, — то import найдёт его, а не настоящий модуль. Ошибка тогда выглядит иначе: ImportError или AttributeError: module 'random' has no attribute 'randint'. Переименуйте свой файл, например в my_random.py.