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 .pyco .pyoen comparación con la fuente.py archivo .
Quinto: un usuario final con solo un .pyco.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 .pycarchivo de esta manera:
python -m py_compile myscript.py
Esto elimina los comentarios. Se deja docstringsintacto. 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 .pyoarchivo en lugar de un .pycarchivo; 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 .pyfecha del archivo, si está presente, para decidir si debe ejecutar el .pyarchivo en lugar del archivo .pyco .pyo--- así que edite su archivo .py, y el .pyco .pyoes obsoleto y se pierden los beneficios que obtuvo. Debe volver a compilarlo para recuperar nuevamente los beneficios .pyco .pyobeneficios, como pueden ser.
Inconvenientes:
Primero: hay una "cookie mágica" .pycy .pyoarchivos 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 .pyco .pyosin el asociado .pypara recompilar o touchreemplaza el .pyco .pyo, el usuario final tampoco podrá solucionarlo.
Segundo: si docstringsse omite con el uso de la -OOopció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 -OOopción de Python también implementa algunas optimizaciones según la -Oopció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/pythonla primera línea, esto se elimina .pycy los .pyoarchivos 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.