Что такое __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.