Что такое __main__.py
файл, какой код я должен вставить в него, и когда он должен быть?
Что такое __main__.py?
Ответ 1
Часто программа Python запускается путем именования файла .py в командной строке:
$ python my_program.py
Вы также можете создать каталог или zipfile, полный кода, и включить __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
Вам нужно будет решить, может ли ваше приложение быть полезным при выполнении этого.
Ответ 2
Что такое
__main__.py
файл для?
При создании модуля Python обычно выполняется выполнение некоторыми функциями (обычно содержащимися в функции main
) при запуске в качестве точки входа в программу. Обычно это делается со следующей общей идиомой, расположенной в нижней части большинства файлов Python:
if __name__ == '__main__':
# execute only if run as the entry point into the program
main()
Вы можете получить ту же семантику для пакета Python с __main__.py
. Это приглашение оболочки linux, $
, если у вас нет Bash (или другой оболочки Posix) в Windows, просто создайте эти файлы в demo/__<init/main>__.py with contents in between the
EOF`s:
$ mkdir demo
$ cat > demo/__init__.py << EOF
print('demo/__init__.py executed')
def main():
print('main executed')
EOF
$ cat > demo/__main__.py << EOF
print('demo/__main__.py executed')
from __init__ import main
main()
EOF
(В оболочке Posix/ Bash вы можете сделать выше, без << EOF
и заканчивая EOF
, введя Ctrl-D, символ конца файла в конце каждой команды cat)
И теперь:
$ python demo
demo/__main__.py executed
demo/__init__.py executed
main executed
Вы можете получить это из документа. В документации говорится:
__main__
- среда верхнего уровня script
'__main__'
- это имя области, в которой выполняется код верхнего уровня. Модули__name__
устанавливаются равными'__main__'
при чтении из стандартного ввода, script или из интерактивного приглашения.Модуль может узнать, работает ли он в основной области проверив собственный
__name__
, который позволяет использовать общую идиому для условно выполняющий код в модуле, когда он запускается как script или сpython -m
, но не при импорте:if __name__ == '__main__': # execute only if run as a script main()
Для пакета такой же эффект может быть достигнут путем включения
__main__.py
, содержимое которого будет выполняться при запуске модуля с помощью-m
.
Сжатые
Вы также можете упаковать это в один файл и запустить его из командной строки, как это, но обратите внимание, что в zipped-пакетах не могут быть подпакеты:
$ python -m zipfile -c demozip demo/*
$ python demozip
demo/__main__.py executed
demo/__init__.py executed
main() executed
Ответ 3
__main__.py
используется для программ python в zip файлах. Файл __main__.py
будет запущен при запуске zip файла. Например, если zip файл был таким:
test.zip
__main__.py
а содержимое __main__.py
было
import sys
print "hello %s" % sys.argv[1]
Тогда, если бы мы выполнили python test.zip world
, мы получили бы hello world
out.
Итак, файл __main__.py
запускается, когда python вызывается в zip файле.
Ответ 4
Вы создаете __main__.py
в yourpackage
, чтобы сделать его исполняемым как:
$ python -m yourpackage
Ответ 5
Если ваш script - это каталог или ZIP файл, а не один файл python, __main__.py
будет выполняться, когда "script" передается как аргумент интерпретатору python.