Какой .py-файл выполняет 'python -m & lt; module & gt;' бег? [Дубликат]

Это пример программы, которую я написал, чтобы проверить, является ли число простым или нет.

def is_prime(x):
    y=0
    if x<=1:
        return False
    elif x == 2:
        return True
    elif x%2==0:
        return False
    else:
        root = int(x**.5)+2
        for i in xrange (2,root):
            if x%i==0:
                return False
                y=1
        if y==0:
            return True
213
задан slang 30 December 2012 в 13:49
поделиться

5 ответов

Часто программа 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

. Вы сами должны решить, может ли ваше приложение быть полезным, например, это.

222
ответ дан Mr. B 28 August 2018 в 21:02
поделиться

Вы создаете __main__.py в yourpackage, чтобы сделать его исполняемым как:

$ python -m yourpackage
12
ответ дан A-B-B 28 August 2018 в 21:02
поделиться

Что представляет собой файл __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

(In в оболочке Posix / Bash вы можете сделать это без использования << EOF s и окончания EOF s, введя Ctrl-D, символ конца файла в конце каждой команды cat)

И теперь:

$ python demo
demo/__main__.py executed
demo/__init__.py executed
main executed

Вы можете получить это из документа. В документации говорится:

__main__ - Сценарий верхнего уровня

'__main__' - это имя области, выполняется код уровня. Модуль __name__ устанавливается равным '__main__' при чтении со стандартного ввода, сценария или из интерактивного приглашения.

Модуль может узнать, работает ли он в основной области, проверяя его собственный __name__, который допускает общую идиому для условного выполнения кода в модуле, когда он запускается как сценарий или с python -m, но не когда он импортируется:

if __name__ == '__main__':
      # execute only if run as a script
      main()

Для пакета , тот же эффект может быть достигнут путем включения модуля __main__.py, содержимое которого будет выполняться, когда модуль будет работать с -m.

Zipped

Вы также можете упаковать это в один файл и запустить его из командной строки, как это, но обратите внимание, что zipped-пакеты не могут выполнять подпакеты или подмодули в качестве точки входа:

$ python -m zipfile -c demozip demo/*
$ python demozip
demo/__main__.py executed
demo/__init__.py executed
main() executed
51
ответ дан Aaron Hall 28 August 2018 в 21:02
поделиться

__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, мы бы get hello world.

Таким образом, файл __main__.py запускается, когда python вызывается в zip-файле.

20
ответ дан Blue Peppers 28 August 2018 в 21:02
поделиться

Если ваш скрипт является каталогом или файлом ZIP, а не одним файлом python, __main__.py будет выполняться, когда «скрипт» передается как аргумент интерпретатору python.

12
ответ дан geoffspear 28 August 2018 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: