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

99

Estoy comenzando con Python (ya es hora de que lo intente) 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 tener un main.pyarchivo muy largo y me gustaría dividirlo. En general, estoy buscando: ¿Cómo organizan los programadores de Python múltiples archivos fuente? ¿Existe una estructura en particular que funcione para usted?

Mis preguntas específicas incluyen:

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

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

Andrés Jaan Tack
fuente
4
Esto explicará un par de cosas sobre la organización de su código docs.python.org/tutorial/modules.html
Nikola Smiljanić
2
Aquí hay información más útil de los documentos de Python. <br> docs.python.org/3/tutorial/modules.html#packages
rda3mon
11
Esta pregunta busca una convención ampliamente aceptada específicamente en la comunidad de Python. La respuesta no es una cuestión de opinión, aunque, como la mayoría de las respuestas, podría cambiar con el tiempo. Sugiero que se vuelva a abrir o, al menos, que se recupere la respuesta original.
Andres Jaan Tack

Respuestas:

32

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

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

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

  • Cree otro archivo fuente en la misma carpeta (llamemos al nuestro utils.pypara este ejemplo)
  • Mover lo clases, funciones, declaraciones, etc que necesita de main.pyenutils.py
  • En main.pyañadir una sola línea en la parte superior:import utils

Conceptualmente, lo que hace es crear un nuevo módulo llamado utilsen otro archivo fuente. Luego puede importarlo donde sea necesario.

Dibujó Noakes
fuente
¿Recuerda el artículo que señaló Eric? Parece que no puedo encontrar un Eric en esta pregunta / respuesta
Daniel Rucci
7
@DanR, sí, este es el artículo . Por alguna razón, un moderador eliminó su respuesta, a pesar de tener 56 votos a favor.
Drew Noakes
1
@DrewNoakes: Creo que se eliminó por ser una respuesta de solo enlace; si tan solo hubiera resumido los puntos principales del artículo.
smci
1
Desafortunadamente, el artículo es un enlace muerto ahora :-(. La última versión archivada está aquí: web.archive.org/web/20190714164001/http://…
Igor Brejc
7

La forma en que debe organizar su código y las pruebas es exactamente la misma que lo haría para cualquier lenguaje OO.

Respuestas de la forma en que lo hago. Puede que no esté bien, pero funciona para mí.

  1. Depende de cómo se divida su funcionalidad. Para mi aplicación principal de Python, 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. Utilice DocString en todas partes para realizar un seguimiento de todo
  2. Después de asegurarse de que los __init__.pyarchivos relevantes estén en las carpetas. es solo un simple caso defrom module import class
Probador Automatizado
fuente
5
Sin embargo, una advertencia: Java tiene una relación dictatorial con paquetes, archivos y clases. A veces termino con muchos más archivos fuente de los que realmente me gustaría. Las convenciones de algunas organizaciones, por ejemplo, evitar las clases internas (anidadas) o las clases "auxiliares" más bajas en el archivo, empeoran esto, más allá de los requisitos del compilador. Manténgalo ordenado y una jerarquía es útil, pero trate de evitar el trabajo.
Roboprog