2011-01-14 8 views
5

Tengo una extraña situación en la que necesito cargar un archivo fuente Python a un servidor de prueba para su evaluación, pero quiero mantener mi aplicación organizada en múltiples archivos/módulos/paquetes. Desafortunadamente, el servidor de prueba está fuera de mi control, por lo que no puedo modificarlo para permitirme cargar un archivo ZIP que contenga mi código.Compactando una aplicación Python en un archivo de fuente única

¿Hay alguna manera fácil de tomar una gran cantidad de archivos fuente Python que abarquen una aplicación y reducirlos automáticamente a un único archivo fuente (o archivo .pyc)? Por simplicidad, solo un archivo se consideraría como el "punto de entrada" y tiene un if __name__ == '__main__'. El archivo final aún debe ser ejecutable por el intérprete de Python, por lo que no puedo usar un generador de Python a EXE.

Respuesta

4

Si no puede cargar un archivo comprimido, quizás pueda seguir algunas de las sugerencias que figuran here. La idea es crear y cargar un archivo de script que contenga una línea shebang de Python (ignorada por el intérprete) antes de un archivo comprimido. Luego puede dejar que el intérprete de Python lea directamente el archivo zip o lo ejecuta desde un shell. Para que esto funcione, debes usar al menos Python 2.6.

zip testapp.zip * 
echo '#!/usr/bin/env python' | cat - testapp.zip > testapp.py 
chmod 755 testapp.py 

Para ejecutar cualquiera:

python testapp.py 

o:

./testapp.py 

Como se discutió en la entrada del blog, dependiendo de qué versiones son Python que necesita para apoyar y qué características que usted necesita, hay varios ajustes que puede necesitar hacer en el diseño de su fuente para incluir los archivos necesarios __main__.py y __init__.py para crear un paquete apropiado y crear comió un enlace simbólico __main__.py fuera del directorio del paquete principal. Es un poco complicado, pero una vez que lo hagas funcionar, debería ser fácil de automatizar, suponiendo que tu servidor de prueba pueda manejar ese archivo de pseudo texto. La idea clave aquí es que el intérprete de Python está leyendo y descomprimiendo el archivo zip, no un programa externo.

Si el servidor de pruebas puede manejar scripts de shell POSIX estándar, otra opción podría ser crear un script que ajuste todo en un conjunto de aquí dentro de un script grande.

+0

+1 Truco muy bueno, no tenía idea de que eso fuera posible. – plundra

+0

Muy resbaladizo. Sin embargo, su enlace parece estar roto. ¿Ese artículo aún está por aquí? – Cerin

+0

Lo sentimos, faltaba el 'l' posterior, ahora corregido. –

Cuestiones relacionadas