У интерпретатора python есть опция модуля -m
, которая "Запускает модуль модуля библиотеки как script".
С помощью этого кода python a.py:
if __name__ == "__main__":
print __package__
print __name__
Я протестировал python -m a
, чтобы получить
"" <-- Empty String
__main__
тогда как python a.py
возвращает
None <-- None
__main__
Для меня эти два вызова кажутся одинаковыми, за исключением того, что __package__ не является None при вызове с параметром -m.
Интересно, что с python -m runpy a
я получаю то же самое, что и python -m a
с модулем python, скомпилированным для получения a.pyc.
Какая (практическая) разница между этими вызовами? Любые плюсы и минусы между ними?
Кроме того, David Beazley Python Essential Reference объясняет это как "Параметр -m запускает библиотечный модуль как script, который выполняется внутри модуля __main__ до выполнения основного script". Что это значит?