Supposons que j'ai une fonction ou classe python utile (ou autre) appelée useful_thing
qui 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
où useful_thing
est 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
où useful_thing
est défini dans module.py
. Dans le cas du package __init__.py
ressemblerait à 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 :)
la source
Réponses:
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
json
etunittest
de 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:
six
est une distribution d'un seul modulesetuptools_subversion
,formatflowed
,rtfunicode
.Pour un bon exemple de projets qui font vraiment une excellente utilisation des packages, regardez:
requests
Il n'y a pas de recommandation «officielle»; les deux options sont entièrement valides.
la source