Más:
Primero: ofuscación leve y vencible.
Segundo: si la compilación resulta en un archivo significativamente más pequeño, obtendrá tiempos de carga más rápidos. Agradable para la web.
Tercero: Python puede omitir el paso de compilación. Más rápido en carga inicial. Agradable para la CPU y la web.
Cuarto: cuanto más comentes, más pequeño será el archivo .pyc
o .pyo
en comparación con la fuente.py
archivo .
Quinto: un usuario final con solo un .pyc
o.pyo
archivo en la mano es mucho menos probable que le presente un error que causó por un cambio no revertido del que se olvidó informarle.
Sexto: si apunta a un sistema incrustado, obtener un archivo de menor tamaño para incrustar puede representar una ventaja significativa, y la arquitectura es estable, por lo que el inconveniente, que se detalla a continuación, no entra en juego.
Compilación de nivel superior
Es útil saber que puede compilar un archivo fuente de Python de nivel superior en un .pyc
archivo de esta manera:
python -m py_compile myscript.py
Esto elimina los comentarios. Se deja docstrings
intacto. Si también desea deshacerse de él docstrings
(es posible que desee pensar seriamente en por qué lo está haciendo), compile de esta manera en su lugar ...
python -OO -m py_compile myscript.py
... y obtendrá un .pyo
archivo en lugar de un .pyc
archivo; igualmente distribuible en términos de la funcionalidad esencial del código, pero más pequeño por el tamaño del despojado docstrings
(y menos fácilmente entendible para el empleo posterior si tuviera decentedocstrings
en primer lugar). Pero vea el inconveniente tres, a continuación.
Tenga en cuenta que python usa la .py
fecha del archivo, si está presente, para decidir si debe ejecutar el .py
archivo en lugar del archivo .pyc
o .pyo
--- así que edite su archivo .py, y el .pyc
o .pyo
es obsoleto y se pierden los beneficios que obtuvo. Debe volver a compilarlo para recuperar nuevamente los beneficios .pyc
o .pyo
beneficios, como pueden ser.
Inconvenientes:
Primero: hay una "cookie mágica" .pyc
y .pyo
archivos que indican la arquitectura del sistema en la que se compiló el archivo Python. Si distribuye uno de estos archivos en un entorno de un tipo diferente, se romperá. Si distribuye el .pyc
o .pyo
sin el asociado .py
para recompilar o touch
reemplaza el .pyc
o .pyo
, el usuario final tampoco podrá solucionarlo.
Segundo: si docstrings
se omite con el uso de la -OO
opción de línea de comando como se describe anteriormente, nadie podrá obtener esa información, lo que puede hacer que el uso del código sea más difícil (o imposible).
Tercero: la -OO
opción de Python también implementa algunas optimizaciones según la -O
opción de línea de comando; Esto puede resultar en cambios en la operación. Las optimizaciones conocidas son:
sys.flags.optimize
= 1
assert
las declaraciones se saltan
__debug__
= Falso
Cuarto: si intencionalmente hiciste que tu script de Python fuera ejecutable con algo del orden de #!/usr/bin/python
la primera línea, esto se elimina .pyc
y los .pyo
archivos y esa funcionalidad se pierde.
Quinto: algo obvio, pero si compila su código, no solo puede verse afectado su uso, sino que el potencial de que otros aprendan de su trabajo se reduce, a menudo severamente.