Distribution de fichiers python unique: module ou package?

24

Supposons que j'ai une fonction ou classe python utile (ou autre) appelée useful_thingqui existe dans un seul fichier. Il existe essentiellement deux façons d'organiser l'arborescence source. La première façon utilise un seul module:

- setup.py
- README.rst
- ...etc...
- foo.py

useful_thingest défini dans foo.py. La deuxième stratégie consiste à réaliser un package:

- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py

useful_thingest défini dans module.py. Dans le cas du package __init__.pyressemblerait à ceci

from foo.module import useful_thing

de sorte que dans les deux cas, vous pouvez le faire from foo import useful_thing.

Question: Quelle voie est préférée et pourquoi?

EDIT: Étant donné que l'utilisateur gnat dit que cette question est mal formée, j'ajouterai que le didacticiel officiel de l'empaquetage python ne semble pas commenter laquelle des méthodes décrites ci-dessus est la préférée. Je ne donne pas explicitement ma liste personnelle des avantages et des inconvénients, car je souhaite savoir s'il existe une méthode préférée par la communauté, sans générer de discussion sur les avantages / inconvénients :)

DanielSank
la source
Partager vos recherches aide tout le monde . Dites-nous ce que vous avez essayé et pourquoi cela n'a pas répondu à vos besoins. Cela démontre que vous avez pris le temps d'essayer de vous aider, cela nous évite de réitérer des réponses évidentes et, surtout, cela vous aide à obtenir une réponse plus spécifique et pertinente. Voir aussi Comment demander
gnat
1
@gnat: Merci pour le lien vers la façon de demander. Je suis conscient de la bonne pratique de poser des questions, mais dans ce cas, je ne pensais pas qu'il était approprié de donner mon expérience car cela transformerait probablement ce que j'ai posé comme une question claire «A ou B» en une sollicitation d'opinions. Comment recommanderiez-vous d'améliorer cette question sans la fonder sur une opinion?
DanielSank
@gnat: En d'autres termes, si j'étais intéressé par une liste des avantages / inconvénients des deux méthodes, j'aurais demandé "Quels sont les avantages et les inconvénients de ces deux méthodes" et j'aurais inclus ma propre liste partielle.
DanielSank

Réponses:

17

Vous faites la chose la plus simple qui vous convient .

Pour un module à une fonction , il est absolument inutile de créer un package. Les packages sont utiles pour créer un espace de noms supplémentaire et / ou pour organiser votre code sur plusieurs modules.

Les modules jsonet unittestde la bibliothèque standard Python sont en fait des packages par exemple, à des fins d'organisation de code. Mais il est tout à fait correct de laisser le code vivant actuellement dans un seul fichier python, comme un module.

Si vous voulez des exemples:

Pour un bon exemple de projets qui font vraiment une excellente utilisation des packages, regardez:

Il n'y a pas de recommandation «officielle»; les deux options sont entièrement valides.

Martijn Pieters
la source
Il n'y a donc pas de méthode officiellement préférée?
DanielSank
3
Non, il n'y a pas de méthode préférée.
Martijn Pieters