Какова цель ключа -m? - PullRequest
       15

Какова цель ключа -m?

119 голосов
/ 30 сентября 2011

Не могли бы вы объяснить мне, в чем разница между звонками

python -m mymod1 mymod2.py args

и

python mymod1.py mymod2.py args

Кажется, в обоих случаях mymod1.py вызывается, а sys.argv -

['mymod1.py', 'mymod2.py', 'args']

Так для чего нужен переключатель -m?

Ответы [ 2 ]

108 голосов
/ 30 сентября 2011

Первая строка Rationale секции PEP 338 гласит:

В Python 2.4 добавлен ключ командной строки -m, позволяющий расположить модули, используя пространство имен модулей Python для выполнения в качестве сценариев. Мотивирующими примерами были стандартные библиотечные модули, такие как pdb и profile, и реализация Python 2.4 отлично подходит для этой ограниченной цели.

Таким образом, вы можете указать любой модуль в пути поиска Python, а не только файлы в текущем каталоге. Вы правы, что python mymod1.py mymod2.py args имеет точно такой же эффект. Первая строка раздела Scope of this proposal гласит:

В Python 2.4 модуль, расположенный с использованием -m, выполняется так же, как если бы его имя файла было указано в командной строке.

С -m возможно больше, например, работа с модулями, которые являются частью пакета, и т. Д. Это то, о чем рассказывается остальная часть PEP 338. Прочитайте это для получения дополнительной информации.

5 голосов
/ 14 декабря 2018

Еще одна вещь, которую я думаю, стоит упомянуть, когда выполнить

python -m some_package some_arguments

Python Interpretor будет искать файл __main__.py в пути пакета для выполнения. Это эквивалентно:

python path_to_package/__main__.py somearguments

Он выполнит содержимое после:

if __name__ == "__main__":

если файл не существует, этот пакет не может быть выполнен напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...