web-dev-qa-db-fra.com

Comment dois-je organiser Python code source?

Je commence avec Python (il est grand temps de lui donner un coup de feu), et je recherche quelques bonnes pratiques.

Mon premier projet est une file d'attente qui exécute des expériences en ligne de commande dans plusieurs threads. Je commence à avoir un très long main.py fichier, et je voudrais le casser. En général, je recherche: Comment les programmeurs python organisent-ils plusieurs fichiers sources? Existe-t-il une structure particulière qui fonctionne pour vous?

Mes questions spécifiques incluent:

  1. Chaque classe doit-elle figurer dans un fichier distinct?
  2. Comment dois-je organiser les tests unitaires par rapport au code source?
  3. Où dois-je mettre les commentaires doc, en particulier ceux pour le fonctionnement en ligne de commande?
  4. Si j'utilise plusieurs répertoires, comment 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 bon .

92
Andres Jaan Tack

Le article souligné par Eric to est génial car il couvre les détails de l'organisation de grandes bases de code Python.

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

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

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

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

27
Drew Noakes

La façon dont vous devez organiser votre code et vos tests est exactement la même que pour n'importe quelle 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. Cela dépend de la façon dont votre fonctionnalité est divisée. Pour mon application principale python j'ai 1 fichier avec des classes pour les points d'entrée, puis des packages de différents bits de fonctionnalité
  2. J'utilise PyDev pour Eclipse et je l'organise comme je le ferais pour Java.
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. Utilisez DocString partout pour garder une trace de tout
  2. Après vous être assuré que le __init__.py les fichiers se trouvent dans les dossiers. c'est juste un simple cas de from module import class
6
AutomatedTester