Как скомпилировать файл Python?

57

Я начал изучать Python, и я также новый пользователь Ubuntu. Мне нужно знать способы компиляции .pyфайлов. Я пробовал с командой

python "hello.py"

Каковы другие способы компиляции Python?

Бхарат Лакшман
источник

Ответы:

58

В дополнение к ответу Брайана, если вы просто хотите скомпилировать файл или группу файлов из терминала, py_compileмодуль может быть выполнен в виде сценария следующим образом:

python -m py_compile fileA.py fileB.py fileC.py ...

Yamaho
источник
9
Если вы компилируете, потому что вам нужна скорость, вы также можете добавить -Oфлаг, например python -O -m py_compile …, который «включит базовую оптимизацию». В основном он удаляет assertоператоры и if __debug__код, поэтому для большинства кода это не имеет никакого эффекта. Смотрите man pythonи «Что делает оптимизацию Python ... делать?» Для деталей.
Рори О'Кейн
26

Также имейте в виду, что вам не нужно компилировать .pyфайл для его запуска. Python является интерпретируемым языком, и вы можете запускать сценарии напрямую, используя:

python hello.py

Или сделайте ваш скрипт исполняемым, добавив #!/usr/bin/env pythonего в начало скрипта, сделав файл исполняемым chmod +x hello.pyи запустив:

./hello.py

Тот факт, что Python внутренне компилирует ваш .pyскрипт в .pycфайлы байт-кода по соображениям производительности, является деталью реализации, и, если у вас нет веских причин для этого, пусть Python сам решает, когда и если компилировать.

MestreLion
источник
Я не понимаю, почему это работает. Разве интерпретатор Python не должен уметь читать сценарий, чтобы запустить его? Если вы даете только разрешение на выполнение ( chmod +x), как интерпретатор читает сценарий?
yellow01
@ yellow01: когда вы выполняете скрипт, который содержит «шебанг», т. е. первая строка начинается с #!/path/to/interpreter, ядро ​​фактически выполняет все, что там объявлено, передавая путь скрипта в качестве аргумента. В моем примере, когда вы запускаете ./hello.pyто, что на самом деле выполняется /usr/bin/env python ./hello.py. См.
En.wikipedia.org/wiki/Shebang_(Unix
@ yellow01 Вы правы в том, что переводчику понадобятся разрешения на чтение после запуска процесса, описанного MestreLion. Тем не менее, chmod +xгранты выполняются, и не затрагивают существующие разрешения, так что, по-видимому, они доступны для чтения в дополнение к тому, что теперь они исполняемые.
спектры
11

Проверьте эту ссылку Компиляция в Python

В середине страницы рассказывается о модуле py_compile, который можно импортировать. Синтаксис выглядит следующим образом:

import py_compile

py_compile.compile("file.py")

Этот метод компиляции не будет запускать модуль так же, как и запуск файла python file.py.

Существует также метод, который компилирует все дерево каталогов, но я позволю вам проверить ссылку, чтобы увидеть, как это выполняется.

Надеюсь это поможет.

Bryan
источник
4

Вы можете компилировать скрипты Python в двоичный код, используя различные методы, но я обнаружил, что использование Nuitka более эффективно.

Nuitka - это компилятор Python-to-C ++, который поддерживает практически все версии python.

Синтаксис команды так же прост, как

nuitka hello.py

Перейти к http://nuitka.net/doc/user-manual.html для получения дополнительной информации.

салафитов
источник
6
Как эффективнее? Зачем кому-то хотеть его использовать?
Муру
Nuitka действительно очень полезна - например, она позволяет вам отправлять программы Python на компьютеры, где Python не установлен. Но так как nuitka компилирует программы Python в машинный код C ++, вы можете обойти это.
user258532