Así es como puedo minimizar los requisitos de disco para la línea principal de Python 2.7 en el trabajo del día:
1) eliminar los paquetes de la biblioteca estándar, que no será necesario. La siguiente es una lista conservadora:
bsddb/test ctypes/test distutils/tests email/test idlelib lib-tk
lib2to3 pydoc.py tabnanny.py test unittest
Tenga en cuenta que algunos códigos Python pueden tener dependencias sorprendentes; p.ej. setuptools
necesita unittest
para ejecutar.
2) Precompila todo el código de Python, usando -OO para despojar de las afirmaciones y docstrings.
find -name '*.py' | python -OO -m py_compile -
Tenga en cuenta que Python por defecto no mira los archivos .pyo
; también debe solicitar explícitamente la optimización en tiempo de ejecución, utilizando una opción o una variable de entorno. ejecutar secuencias de comandos en una de las siguientes maneras:
python -OO -m mylib.myscript
PYTHONOPTIMIZE=2 python -m mylib.myscript
3) Eliminar .py
archivos de código fuente (a menos que necesite para funcionar como guiones) y .pyc
archivos no optimizadas.
find '(' -name '*.py' -or -name '*.pyc' ')' -and -not -executable -execdir rm '{}' ';'
4) Comprima los archivos de la biblioteca Python. Python puede cargar módulos desde un archivo zip. Las rutas en el archivo zip deben coincidir con la jerarquía del paquete; por lo tanto, debe combinar los directorios site-packages
y .egg
en el directorio principal de la biblioteca antes de comprimirlos. (O puede agregar varios archivos zip a la ruta de acceso de Python).
En Linux, la ruta predeterminada de Python incluye /usr/lib/python27.zip
, así que simplemente suelte el archivo zip allí y ya está listo.
Deje os.pyo
como un archivo ordinario (sin comprimir), ya que Python lo busca como una comprobación de cordura. Si lo mueve al archivo comprimido, recibirá una advertencia sobre cada invocación de Python (aunque todo seguirá funcionando).O simplemente puede dejar un archivo os.py
vacío allí y colocar el real en el archivo zip.
notas finales:
- De esta manera, Python cabe en 7 MB de espacio en disco. Hay mucho más que se puede hacer para reducir el tamaño, pero 7 MB era lo suficientemente pequeño para mis propósitos. :)
- Python bytecode no es compatible entre versiones, pero ¿a quién le importa cuando eres tú quien hace la compilación y tú que controlas la versión de Python?
.pyo
archivos en un archivo comprimido debe ser una ganancia de rendimiento en todos los casos, a menos que el disco sea extremadamente rápido y el procesador/RAM sea extremadamente lento. De cualquier manera, Python se ejecuta desde la memoria, no en el formato en disco, por lo que solo afecta el rendimiento en la carga. Aunque la extracción de documentos puede ahorrar bastante memoria.
- Tenga en cuenta que
.pyo
archivos no contienen assert
declaraciones.
- Los archivos
.pyo
conservan los nombres de las funciones y los números de línea, por lo que no se reduce la capacidad de búsqueda: aún se obtienen buenos trazados, solo hay que buscar manualmente el número de línea en la fuente, que de todas maneras se tendría que hacer.
- Si desea "piratear" un archivo en tiempo de ejecución, simplemente colóquelo en el directorio de trabajo actual. Tiene prioridad sobre el archivo zip de la biblioteca.
Como recuerdo, los archivos .pyc se generan automáticamente la primera vez que se ejecutan los archivos .py. – Powerlord
El archivo .pyc se genera automáticamente la primera vez que se importan archivos .py –