¿Cómo debo organizar el código fuente de Python?

Estoy empezando con Python (es hora de que lo pruebe) y estoy buscando algunas de las mejores prácticas.

Mi primer proyecto es una cola que ejecuta experimentos de línea de comandos en varios subprocesos. Estoy empezando a obtener un archivo main.py muy largo, y me gustaría main.py . En general, estoy buscando: ¿Cómo organizan los progtwigdores de Python múltiples archivos de origen? ¿Hay alguna estructura particular que te funcione?

Mis preguntas específicas incluyen:

  1. ¿Debería cada clase estar en un archivo separado?
  2. ¿Cómo debo organizar las pruebas unitarias en relación con el código fuente?
  3. ¿Dónde debo colocar los comentarios del documento, específicamente aquellos para la operación de la línea de comandos?
  4. Si uso varios directorios, ¿cómo importo clases entre ellos?

Probablemente pueda sacar algunas de mis propias conclusiones aquí por ensayo y error, pero prefiero comenzar por algo bueno .

El artículo que Eric señaló es asombroso porque cubre los detalles de la organización de grandes bases de códigos Python.

Si ha llegado aquí desde Google y está intentando descubrir cómo dividir un archivo de origen grande en varios archivos más manejables, resumiré el proceso brevemente.

Supongamos que actualmente tiene todo en un archivo llamado main.py :

  • Cree otro archivo fuente en la misma carpeta (llamemos a nuestro utils.py para este ejemplo)
  • Mueva las clases, funciones, declaraciones, etc. que necesite de main.py a utils.py
  • En main.py agregue una sola línea en la parte superior: import utils

Conceptualmente, lo que esto hace es crear un nuevo módulo llamado utils en otro archivo fuente. Luego puedes importarlo donde sea necesario.

La forma en que debe organizar su código y sus pruebas es exactamente la misma que haría con cualquier idioma OO.

Respuestas de la forma en que lo hago. Puede que no sea correcto pero funciona para mí

  1. Depende de cómo se divide tu funcionalidad. Para mi aplicación Python principal tengo 1 archivo con clases para los puntos de entrada y luego paquetes de diferentes bits de funcionalidad
  2. Uso PyDev para eclipse y lo organizo como lo haría para Java.
 > Workspace > | > |-Src > | |-Package1 > | |-Package2 > | |-main.py > |-Test > |-TestPackage1 > |-TestPackage2 
  1. Usa DocString en todas partes para hacer un seguimiento de todo
  2. Después de asegurarse de que los archivos __init__.py relevantes estén en las carpetas. Es sólo un caso simple de la from module import class