Ответ
Флаг -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 .