Module vs. Package?

140

Chaque fois que je le from 'x' import 'y'faisais, je me demandais lequel est considéré comme le «module» et quel est le «package», et pourquoi ce n'est pas l'inverse.

Templier noir
la source
1
Pour savoir pourquoi ce n’est pas l’inverse, consultez stackoverflow.com/questions/3600352/…
1
Pour ma part, je suis reconnaissant pour cette question, car la réponse est concise et donne les connaissances nécessaires exactes. La documentation est parfaite, mais elle est détaillée et contient plus d’informations que ce que demandait le PO, et certainement plus que ce dont j’avais besoin. Je voulais juste une réponse à cette question précise, et la réponse ci-dessous est exactement ce que je voulais. Beaucoup d'entre nous n'ont tout simplement pas besoin de telles réponses formelles ou approfondies.
Teekin
Un concept connexe à connaître - Classes vs modules en Python
RBT

Réponses:

192

Un module Python est simplement un fichier source Python, qui peut exposer des classes, des fonctions et des variables globales.

Lorsqu'il est importé à partir d'un autre fichier source Python, le nom du fichier est traité comme un espace de noms.

Un paquet Python est simplement un répertoire de module (s) Python.

Par exemple, imaginez l’arborescence de répertoires suivante dans /usr/lib/python/site-packages:

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py

Alors vous feriez:

import mypackage.mymodule

ou

from mypackage.mymodule import myclass
Yam Marcovic
la source
Aha, alors quand vous dites que le nom de fichier est traité comme un espace de noms, vous voulez quelque chose comme ça? "mymodule.var1" pour le premier cas ou "myclass.var1" pour le second?
Dark Templar
1
Pas exactement. Le paquet compte toujours dans l'espace de noms. Si vous voulez faire ce que vous avez dit, vous devez le faire depuis mypackage import mymodule.
Yam Marcovic
Il peut être utile d’ajouter quelque chose à propos des packages d’espaces de noms, pour lesquels le code ne doit pas nécessairement tous figurer dans la même arborescence.
holdenweb
@holdenweb Jamais utilisé les différents mécanismes impliqués directement, donc pas un expert. Si vous fournissez une explication détaillée à ce sujet dans une nouvelle réponse, je la citerai dans la mienne.
Yam Marcovic
Probablement un peu trop ésotérique pour en valoir la peine, rétrospectivement
holdenweb