Ответ
Флаг -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__':
.
Практические примеры:
-
Запуск встроенного веб-сервера:
# Запускает простой HTTP-сервер в текущей директории python -m http.server 8000
-
Создание виртуального окружения:
# Использует модуль venv для создания окружения с именем .venv python -m venv .venv
-
Запуск установленного пакета:
# Запускает инструмент для форматирования кода Black python -m black .