Что делает флаг -m при запуске скрипта в Python?

Ответ

Флаг -m указывает интерпретатору Python запустить модуль из sys.path как исполняемый скрипт. Это основной способ запускать модули из стандартной библиотеки или установленных пакетов.

Ключевое отличие от python file.py:

  • python my_module.py: Python ищет файл my_module.py в текущей директории или по указанному пути.
  • python -m my_module: Python ищет my_module в директориях, перечисленных в sys.path (включая директории с установленными пакетами), что позволяет запускать модули без указания полного пути к файлу.

Когда модуль запускается с флагом -m, его глобальная переменная __name__ устанавливается в "__main__", что позволяет выполнять код внутри блока if __name__ == '__main__':.

Практические примеры:

  1. Запуск встроенного веб-сервера:

    # Запускает простой HTTP-сервер в текущей директории
    python -m http.server 8000
  2. Создание виртуального окружения:

    # Использует модуль venv для создания окружения с именем .venv
    python -m venv .venv
  3. Запуск установленного пакета:

    # Запускает инструмент для форматирования кода Black
    python -m black .