2009-07-09 31 views
6

¿Hay alguna manera de armar archivos de Python, similar a JAR en Java? Necesito una forma de empaquetar un conjunto de clases y funciones de Python, pero a diferencia de un módulo estándar, me gustaría que estuviera en un solo archivo.Combinación de archivos de módulo en Python

Respuesta

3

El enfoque más simple es usar zip. Un archivo jar en Java es un archivo zip que contiene algunos metadatos, como un manifiesto; pero no necesariamente necesitas la metadata: Python puede importar desde dentro de un archivo zip siempre que coloques ese archivo zip en sys.path, tal como lo harías con cualquier directorio. En el archivo zip, puede tener los orígenes (archivos .py), pero luego Python tendrá que compilarlos sobre la marcha cada vez que un proceso los importe por primera vez; o puede tener los archivos de código de bytes (.pyc o .pyo) pero luego está limitado a una versión específica de Python y a una ausencia (para .pyc) o presencia (para .pyo) de la marca -O (o -OO))

Como otras respuestas indican, hay formatos como .egg que enriquecen el archivo zip con metatada en Python, así, como Java .jar, pero si en un caso de uso particular que le da valor WRT extra de un archivo zip llano es una decisión de usted para hacer

2

Puede crear archivos zip que contengan el código Python e importar desde archivos zip usando zipimport. Un sistema como PyInstaller (multiplataforma) o py2exe (Windows) hará todo esto por usted.

9

Después de buscar una solución al mismo problema, terminé escribiendo una herramienta sencilla que combina varios archivos .py en una sola: PyBreeder

Sólo funcionará con módulos de Python puro y puede requerir algún juicio- y error para obtener el orden correcto de los módulos, pero es muy útil siempre que desee implementar un script con algunas dependencias como un simple .py. Comentarios/parches/crítica son bienvenidos!

+0

¡Excelente script, gracias por mencionarlo! – TechZilla

+0

Hice [algo similar] (https://github.com/thomasballinger/pyconcat) porque parecía genial, pero PyBreeder se ve menos ridículo y hacky. – Thomas