Для чего нужен __main__.py
файл, какой код я должен в него вставить и когда он мне нужен?
Часто программа на Python запускается путем именования файла .py в командной строке:
$ python my_program.py
Вы также можете создать каталог или zip-файл, полный кода, и включить __main__.py
. Затем вы можете просто назвать каталог или zipfile в командной строке, и он __main__.py
автоматически выполнит :
$ python my_program_dir
$ python my_program.zip
# Or, if the program is accessible as a module
$ python -m my_program
Вы должны решить для себя, может ли ваше приложение получить выгоду от такого выполнения.
Обратите внимание, что __main__
модуль обычно не приходит из __main__.py
файла. Может, но обычно нет. Когда вы запускаете скрипт как python my_program.py
, скрипт будет работать как __main__
модуль, а не как my_program
модуль. Это также происходит для модулей, запущенных как python -m my_module
или несколькими другими способами.
Если вы увидели имя __main__
в сообщении об ошибке, это не обязательно означает, что вы должны искать __main__.py
файл.
python -m program_dir
иpython program_dir
немного другое: последний никогда не запускается__init__.py
в каталоге (если он есть).python3 program_dir
и он побежал__init__.py
.python3 dir
работает,__main__.py
но нет__init__.py
, тогда какpython3 -m dir
работает оба.__main__.py
которого был запущен импорт__init__.py
Для чего нужен
__main__.py
файл?При создании модуля Python модуль обычно выполняет некоторые функции (обычно содержащиеся в
main
функции) при запуске в качестве точки входа в программу. Обычно это делается с помощью следующей распространенной идиомы, расположенной внизу большинства файлов Python:Вы можете получить ту же семантику для пакета Python с
__main__.py
. Это приглашение оболочки Linux,$
если у вас нет Bash (или другой оболочки Posix) в Windows, просто создайте эти файлыdemo/__<init/main>__.py
с содержимым междуEOF
s:(В оболочке Posix / Bash вы можете сделать вышеупомянутое без
<< EOF
s и заканчиваяEOF
s, введя Ctrl+ D, символ конца файла, в конце каждой команды cat)И сейчас:
Вы можете получить это из документации. Документация говорит:
Сжатые
Вы также можете упаковать это в один файл и запустить его из командной строки, как показано ниже, но обратите внимание, что заархивированные пакеты не могут выполнять подпакеты или подмодули в качестве точки входа:
источник
__main__.py
используется для программ на python в zip-файлах__main__.py
Файл будет выполнен , когда почтовый файл в запуске. Например, если zip-файл был таким:и содержание
__main__.py
былоТогда, если бы мы бежали,
python test.zip world
мы бы получилиhello world
вышли.Таким образом,
__main__.py
файл запускается, когда python вызывается в zip-файле.источник
Вы создаете
__main__.py
в ,yourpackage
чтобы сделать его исполняемым , как:источник
-m
работает, если только программа доступна в виде модуля, иначе вы можете использоватьpython <yourpackage>
ПРИМЕЧАНИЕ: без-m
опцииpackage
?python -m <yourproject>
не работает,-m
это избыточный вариант, ноpython <yourpackage>
работает хорошо.a
и допущение, что скриптa/b/c/__main__.py
...python -m b.c
будет выполняться из каталога,a
и основной импорт скрипта будет относительнымa
. Ноpython b/c
будет выполняться из области импорта dir,c
поэтому любой импорт, такой как в основном скрипте,import b.d
будет неудачным.Если ваш скрипт представляет собой каталог или ZIP-файл, а не один файл Python,
__main__.py
он будет выполнен, когда «скрипт» будет передан в качестве аргумента интерпретатору Python.источник