Comment organiser le code source Python?

Je commence à utiliser Python (il est grand temps de tenter le coup), et je recherche quelques bonnes pratiques.

Mon premier projet est une queue qui exécute des expériences en ligne de commande dans plusieurs threads. Je commence à avoir un très long fichier main.py , et j’aimerais le séparer. En général, je recherche: Comment les programmeurs Python organisent-ils plusieurs fichiers sources? Y a-t-il une structure particulière qui fonctionne pour vous?

Mes questions spécifiques incluent:

  1. Chaque classe doit-elle figurer dans un fichier séparé?
  2. Comment dois-je organiser les tests unitaires relatifs au code source?
  3. Où devrais-je mettre des commentaires de doc, en particulier ceux pour le fonctionnement en ligne de commande?
  4. Si j’utilise plusieurs répertoires, comment puis-je importer des classes entre eux?

Je peux probablement tirer certaines de mes propres conclusions ici par essais et erreurs, mais je préfère partir de quelque chose de bien .

L’ article que Eric a souligné est génial car il couvre les détails de l’organisation de grandes bases de code Python.

Si vous avez atterri ici depuis Google et que vous essayez de savoir comment diviser un fichier source volumineux en plusieurs fichiers plus faciles à gérer, je résumerai brièvement le processus.

Supposons que vous ayez tout dans un fichier appelé main.py :

  • Créez un autre fichier source dans le même dossier (appelons-nous utils.py pour cet exemple)
  • Déplacez les classes, fonctions, instructions, etc. dont vous avez besoin de main.py dans utils.py
  • Dans main.py ajoutez une seule ligne en haut: import utils

Conceptuellement, cela consiste à créer un nouveau module appelé utils dans un autre fichier source. Vous pouvez ensuite l’importer là où vous en avez besoin.

La façon dont vous devriez organiser votre code et vos tests est exactement la même que pour toute langue OO.

Réponses de la façon dont je le fais. Ce n’est peut-être pas juste mais ça marche pour moi

  1. Dépend de la façon dont votre fonctionnalité est divisée. Pour mon application python principale, j’ai un fichier avec des classes pour les points d’entrée, puis des paquets de différentes fonctionnalités
  2. J’utilise PyDev pour éclipse et je l’organise comme pour Java.
 > Workspace > | > |-Src > | |-Package1 > | |-Package2 > | |-main.py > |-Test > |-TestPackage1 > |-TestPackage2 
  1. Utilisez DocSsortingng partout pour suivre tout
  2. Après vous être assuré que les fichiers __init__.py appropriés __init__.py trouvent dans les dossiers. c’est juste un cas simple de from module import class