organizar una aplicación de Python

Tengo una aplicación de Python y tengo una pregunta sobre el empaquetado que no es realmente una pregunta de distutils, sino más bien una pregunta sobre cómo organizar y configurar la aplicación para que se use fácilmente desde la línea de comandos.

Suponga que la aplicación contiene un paquete y suponga por el momento que no necesariamente quiero convertirlo en un paquete de distutils (aunque podría disuadirme).

El programa en sí mismo como un subagente SNMP para ser ejecutado por Net-SNMP usando pass_persist. Esto no es particularmente importante para la pregunta, solo significa que el programa en general se ejecuta y lee stdin con respuestas en stdout.

Además, suponga que el agente está estructurado de la manera más o menos canónica de Python

  agent
      __init__.py
      main.py
      <other modules at the same level>

main.py es un programa simple algo como

#!/usr/bin/env python
import sys
def main(argv):
    <initialize the environment, input output, logging and so on>
    while <not done>:
         <process an input>
    <clean up and terminate>

if __name__ == '__main__':
    main(sys.argv)

Parece que hay algunas maneras en que esto se puede organizar para que se ejecute:

Coloque el paquete en algún lugar de los paquetes del sitio y tenga un programa de nivel superior en la RUTA como

#!/usr/bin/env python
from agent import main
main(sys.argv)

Coloque el directorio del paquete en algún lugar y ejecútelo usando

/path/to/directory/agent/main.py

(con la versión de bumpo que consiste en colocar el directorio del agente en la ruta en algún lugar para que pueda ejecutar main.py)

o algún tercer método, más Pythonic y genial, que me permite instalar el código y poner algo en la ruta directamente que no conozco.

Buscar en Google no ha ayudado mucho, sospecho que esta es una de esas preguntas "demasiado tontas para responder". Desafortunadamente, soy demasiado tonto para saber eso.

preguntado el 01 de julio de 12 a las 00:07

2 Respuestas

"Colocar el directorio del paquete en algún lugar" es la mayor parte. El resto es escribir un script de shell que use exec en el intérprete de python con el main.py guión.

#!/bin/sh
exec python /usr/share/myapp/main.py "$@"

Respondido 01 Jul 12, 02:07

La primera opción que enumeró es el método habitual "Pythonic and cool" para hacer esto. También puedes usar Distribuir gestionarlo para que pueda desarrollarse más cómodamente. Luego empaquete o instale cuando haya terminado. El sistema Distribute se puede usar para administrar su desarrollo, así como también como una herramienta de empaque. También genera secuencias de comandos de inicio para usted. tu defines puntos de entrada en tu setup.py y creará el script de inicio de nivel superior para usted.

Al desarrollar puede establecer Modo de desarrollo que configura el entorno de Python para buscar su paquete en su espacio de trabajo. Por lo tanto, cualquier cambio es inmediatamente visible cuando se ejecuta la próxima vez. Luego, una vez desarrollado, puede empaquetarlo como un huevo, o incluso crear un RPM o un instalador de Windows desde la misma fuente.

Respondido 01 Jul 12, 03:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.