2009-11-23 9 views
7

En la mayoría de los entornos de programación, queda claro cómo se distribuye el código en varias partes y cómo interactúa todo. En Python, parece que estoy completamente perdido.¿Cómo se ve el diseño de una aplicación Python?

  • ¿Cómo debe verse el diseño de una aplicación Python?

    Actualmente tengo:

     
    setup.py 
    application_name/ 
        __main__.py 
        __init__.py 
        views/ 
        controllers/ 
        model/ 
        resources/ <- images, videos, ... 
    
  • ¿Cómo se puede ejecutar la aplicación?

    Tengo un script corredor con el siguiente contenido

    #!/usr/bin/env python -m "application_name" 
    

    Si uno incluso utilizar __main__.py para este fin? ¿Es necesario un script de corredor?

  • ¿Cómo debería uno importar partes de la aplicación? (Python 2,6)

    Por ejemplo, en application_name/__main__.py

    from . import controllers.MainWindow 
    

¿Cómo planear la distribución de aplicaciones?

+1

duplicado: http://stackoverflow.com/questions/171785/how-do-you-organize-python-modules, http://stackoverflow.com/questions/ 527919/how-to-properly-organize-a-package-module-dependency-tree, http://stackoverflow.com/questions/501945/how-to-modularize-a-python-application –

Respuesta

5

Hay varias partes a esta pregunta, así que trataremos de responder a ellos, a su vez:

1: Es realmente depende de ti, no hay reglas duras rápida y más allá de las de establecimiento de que un directorio debe tratarse como package y así sucesivamente. Algunos marcos prescribirán una estructura de directorios usando un script para generar andamios (un poco como lo hace Rails en el mundo de Ruby), pero esto es puramente una conveniencia o convención del marco dado. Organice su código y módulos para que tengan sentido lógicamente como lo haría en cualquier otro idioma.

2: Lo que tienes allí está absolutamente bien. Alternativamente, puede usar un installed script si está utilizando distutils, un console_script como parte de una instalación .egg, o como último recurso simplemente llame al script main.py (o como lo llame) directamente. Sin embargo, console_script es bastante común y lo utilizan herramientas como el marco de prueba nose, por ejemplo.

3: Hay un PEP para este tema específico. En mi experiencia, sin embargo, realmente deberías preferir las importaciones absolutas a las relativas. Para forzar este comportamiento se puede hacer:

from __future__ import absolute_import 
+0

¿Qué ocurre con las importaciones relativas explícitas? 'de. importar subpaquete'? Estoy un poco preocupado de que las importaciones absolutas se rompan cuando muevo algunos paquetes o los cambio de nombre. –

+0

Odio no tener reglas claras para esto. Constantemente no estoy seguro si lo estoy haciendo bien. Es una de esas cosas que todo programador tiene que resolver solo y pasa mucho tiempo haciendo exactamente eso. Habría ahorrado mucho tiempo si hubiera algunas pautas. (Al menos para mí.) –

+0

gs: Python es bastante prescriptivo en muchos lugares, por ejemplo PEP8, ¡que especifica el estilo correcto para usar! (Los programadores de C odian esto ...) El PEP I vinculado a intenta aclarar la situación de las importaciones, pero en lo que respecta al diseño del proyecto, es difícil legislar. Dentro de un marco dado sí, pero de lo contrario está abierto al debate. Lo mejor es leer un montón de código y ver lo que te gusta. – jkp

Cuestiones relacionadas