¿Cómo compilar un archivo python?

57

Empecé a aprender Python y también soy un nuevo usuario de Ubuntu. Necesito saber las formas de compilar los .pyarchivos. He intentado con el comando

python "hello.py"

¿Cuáles son las otras formas de compilar Python?

Bharath Lakshman
fuente

Respuestas:

58

Además de la respuesta de Bryan, si simplemente desea compilar un archivo o un grupo de archivos desde un terminal, el py_compilemódulo se puede ejecutar como un script de la siguiente manera:

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

Yamaho
fuente
99
Si está compilando porque quiere velocidad, también puede agregar el -Oindicador, como python -O -m py_compile …, que "activará las optimizaciones básicas". Principalmente elimina las assertdeclaraciones y el if __debug__código, por lo que para la mayoría del código no tiene ningún efecto. Consulte man pythony "¿Qué hace la optimización de Python ...?" Para obtener más detalles.
Rory O'Kane
26

También tenga en cuenta que no necesita compilar un .pyarchivo para ejecutarlo. Python es un lenguaje interpretado, y puede ejecutar los scripts directamente, ya sea usando:

python hello.py

O haga que su script sea ejecutable agregando #!/usr/bin/env pythona la parte superior del script, haciendo que el archivo sea ejecutable chmod +x hello.pyy luego ejecute:

./hello.py

El hecho de que Python compila internamente su .pyscript para codificar en bytes los .pycarchivos por razones de rendimiento es un detalle de implementación, y a menos que tenga una buena razón para hacerlo, deje que Python decida cuándo y si compilar.

MestreLion
fuente
Estoy confundido sobre por qué esto funciona. ¿No necesita el intérprete de Python poder leer el script para ejecutarlo? Si solo otorga permiso de ejecución ( chmod +x), ¿cómo está leyendo el intérprete el guión?
yellow01
@ yellow01: cuando ejecuta un script que contiene un "shebang", es decir, la primera línea comienza con #!/path/to/interpreter, el núcleo realmente ejecuta lo que se declara allí, pasando la ruta del script como argumento. En mi ejemplo, cuando ejecutas ./hello.pylo que realmente se ejecuta es /usr/bin/env python ./hello.py. Ver en.wikipedia.org/wiki/Shebang_(Unix)
MestreLion
@ yellow01 tiene razón en que el intérprete necesitará permisos de lectura una vez iniciado el proceso que describe MestreLion. Sin embargo, las chmod +xconcesiones se ejecutan y no tocan los permisos existentes, por lo que presumiblemente es legible además de ser ahora ejecutable.
espectras
11

Mira este enlace Compilar en Python

En el medio de la página, habla sobre el módulo py_compile que se puede importar. La sintaxis es la siguiente:

import py_compile

py_compile.compile("file.py")

Este método de compilación tampoco ejecutará el módulo, como ejecutar python file.py.

También hay un método que compila un árbol de directorios completo, pero le dejaré revisar el enlace para ver cómo se ejecuta.

Espero que esto ayude.

Bryan
fuente
4

Puede compilar scripts de Python en un código binario usando varios métodos, pero he descubierto que usar Nuitka es más eficiente.

Nuitka es un compilador de Python a C ++ que admite casi todas las versiones de python.

La sintaxis del comando es tan fácil como

nuitka hello.py

Vaya a http://nuitka.net/doc/user-manual.html para obtener más información.

salafi
fuente
66
¿Más eficiente cómo? ¿Por qué alguien querría usarlo?
muru
Nuitka es realmente muy útil, por ejemplo, le permite enviar programas de Python a computadoras donde Python no está instalado. Pero como nuitka compila los programas de Python en el código de máquina C ++, puede evitar eso.
user258532