4. Créer une distribution source¶
Comme montré dans le chapitre Un exemple simple, vous pouvez utiliser la commande sdist pour créer une distribution source. Dans le cas le plus simple,
python setup.py sdist
(en supposant que vous n’avez spécifié aucune option pour la commande sdist dans le script de préparation ou le fichier de configuration), sdist crée une archive au format par défaut pour la plateforme utilisée. Le format par défaut est un fichier tar compressé (.tar.gz
) sur Unix et un fichier ZIP sur Windows.
Vous pouvez donner autant de formats que désiré via l’option --formats
, par exemple :
python setup.py sdist --formats=gztar,zip
pour créer un fichier tarball compressé et un fichier ZIP. Les formats disponibles actuellement sont :
Format |
Description |
Notes |
---|---|---|
|
Fichier zip ( |
(1), (3) |
|
Fichier tar compressé par gzip ( |
(2) |
|
Fichier tar compressé par bzip2 ( |
|
|
Fichier tar compressé par xz ( |
|
|
Fichier tar compressé par compress ( |
(4) |
|
fichier tar ( |
Modifié dans la version 3.5: Ajout du support des fichiers xztar
.
Notes :
Par défaut sur Windows
Par défaut sur Unix
nécessite soit un utilitaire zip extérieur ou le module
zipfile
(inclut dans la bibliothèque standard depuis Python 1.6)nécessite le programme compress. Remarquez que ce format sera bientôt obsolète et sera enlevé des prochaines version de Python.
Lorsque vous utilisez n’importe quel format tar
(gztar
, bztar
, xztar
, ztar
or tar
), vous pouvez spécifier sous Unix le propriétaire et le groupe qui seront appliqué pour chaque fichier de l’archive.
Par exemple, si vous voulez que tous les fichiers de l’archive soient détenu par root :
python setup.py sdist --owner=root --group=root
4.1. Spécifier les fichiers à distribuer¶
Si vous ne fournissez pas une liste explicite de fichiers (ou les instructions pour la générer), la commande sdist en met par défaut le minimum dans la distribution source :
tous les fichiers source Python sous-entendus par les options
py_modules
etpackages
tous les fichiers source C mentionnés dans les arguments
ext_modules
oulibraries
scripts identifiés par l’argument
scripts
. Voir Installation des scripts.tout ce qui ressemble à un script de test
test/test*.py
(pour l’instant, Distutils ne fait rien avec ces scripts de test, si ce n’est les inclure dans les distributions sources, mais dans le futur un standard sera implémenté pour tester les distributions de module Python)README.txt
(ouREADME
),setup.py
(ou peut importe la manière dont vous avez appelé votre script d’installation) etsetup.cfg
tous les fichiers associés aux méta-données
package_data
. Voir Installation de paquets de données.tous les fichiers associés aux méta-données
data_files
. Voir Installation de fichiers additionnels.
Parfois ce fonctionnement suffit, mais généralement vous voudrez spécifier des fichiers supplémentaires à distribuer. La façon classique de le faire est d’écrire un manifeste modèle, appelé MANIFEST.in
par défaut. Ce manifeste modèle est juste une liste d’instructions pour générer votre fichier manifeste final, MANIFEST
, qui est la liste exacte des fichiers à inclure dans votre distribution source. La commande sdist traite ce modèle et génère un manifeste à partir de ces instructions et de ce qu’elle trouve dans le système de fichiers.
Si vous préférez créer votre propre fichier manifeste, le format est simple : un nom de fichier par ligne, uniquement des fichiers normaux (ou leur lien symbolique). Si vous fournissez votre propre MANIFEST
, vous devez tout spécifier : les groupes de fichiers par défaut décrits au-dessus ne sont pas inclus automatiquement dans ce cas.
Modifié dans la version 3.1: Un MANIFEST
existant généré automatiquement sera régénéré sans que sdist ne compare son heure de modification à MANIFEST.in
ou setup.py
.
Modifié dans la version 3.1.3: Les fichiers MANIFEST
commencent par un commentaire indiquant qu’ils sont générés. Les fichiers sans ce commentaire ne sont pas réécrits ou supprimés.
Modifié dans la version 3.2.2: sdist lira un ficher MANIFEST
s’il n’existe pas de MANIFEST.in
, tel qu’il en avait l’habitude.
Le modèle de manifeste possède une commande par ligne, où chaque commande spécifie un ensemble de fichiers à inclure ou à exclure de la distribution source. Par exemple, regardons à nouveau le propre manifeste de Distutils :
include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build
La signification est assez claire : inclure tous les fichiers à la racine de la distribution correspondant à *.txt
, tous les fichiers n’importe où dans le dossier examples
correspondant à *.txt
ou *.py
, et exclure tous les dossiers correspondant à examples/sample?/build
. Tout ceci est fait après l’ensemble d’inclusions standard, vous pouvez donc exclure des fichiers précédemment inclus en utilisant une instruction explicite dans le manifeste. (Vous pouvez aussi utiliser l’option --no-defaults
pour désactiver complètement les inclusions standards). Il existe d’autres commandes dans le langage du fichier manifeste, consultez le chapitre Créer une distribution source: la commande sdist.
L’ordre des commandes dans le modèle manifeste compte : nous avons, à la base, la liste de fichiers par défaut telle que décrite plus haut. Ensuite, chaque commande du modèle ajoute ou supprime des fichiers de cette liste. Une fois que le traitement du manifeste modèle est fini, nous enlevons les fichiers qui ne doivent pas être inclus dans la distribution source :
tous les fichiers dans l’arborescence de build de Distutils (par défaut
build/
)tous les fichiers dans les dossiers nommés
RCS
,CVS
,.svn
,.hg
,.git
,.bzr
ou_darcs
Maintenant nous avons notre liste complète de fichiers ; elle est désormais écrite dans le manifeste pour une utilisation future et sera utilisée pour construire la ou les archive(s) de notre distribution source.
Vous pouvez désactiver l’ensemble des fichiers inclus par défaut en utilisant l’option --no-defaults
, ainsi que désactiver les exclusions standards avec l’option --no-prune
.
Voici le manifeste modèle de Distutils, suivons comment la commande sdist construit la liste des fichiers à inclure dans la distribution source de Distutils.
inclure tous les fichiers source Python dans les sous-dossiers
distutils
etdistutils/command
(parce que des paquets correspondant à ces deux dossiers ont été mentionnés dans l’argumentpackages
du script d’installation — voir le chapitre Rédaction du script setup.py)inclure
README.txt
,setup.py
etsetup.cfg
(fichiers standards)inclure
test/test*.py
(fichiers standard)inclure
*.txt
à la racine de la distribution (ceci trouveREADME.txt
une seconde fois, mais les redondances sont supprimées plus tard)inclure tout fichier de la forme
*.txt
ou*.py
dans la sous-arborescence deexamples
,exclure tous les fichiers dans les sous-arborescences dont les dossiers racines sont de la forme
examples/sample?/build
— Ceci peut exclure des fichiers inclus dans les étapes précédentes, il est donc important que la commandeprune
dans le manifeste modèle vienne après la commanderecursive-include
exclure l’arborescence de
build
ainsi que les dossiersRCS
,CVS
,.svn
,.hg
,.git
,.bzr
et_darcs
Comme dans le script de préparation, les chemins des fichiers et des dossiers dans le manifeste modèle doivent toujours être séparés par des barres obliques (slash en anglais) ; Distutils s’occupe de les convertir à la représentation standard de votre plateforme. De cette manière, le manifeste modèle est portable sur tout système d’exploitation.