Python Language
setup.py
Recherche…
Paramètres
Paramètre | Usage |
---|---|
name | Nom de votre distribution. |
version | Chaîne de version de votre distribution. |
packages | Liste des packages Python (c'est-à-dire des répertoires contenant des modules) à inclure. Cela peut être spécifié manuellement, mais un appel à setuptools.find_packages() est généralement utilisé à la place. |
py_modules | Liste des modules Python de niveau supérieur (c'est-à-dire des fichiers .py uniques) à inclure. |
Remarques
Pour plus d'informations sur les emballages en python, voir:
Pour rédiger des paquets officiels, il existe un guide d’utilisation des emballages .
But de setup.py
Le script de configuration est le centre de toutes les activités de création, de distribution et d’installation des modules utilisant les Distutils. Son but est l'installation correcte du logiciel.
Si tout ce que vous voulez faire est de distribuer un module appelé foo, contenu dans un fichier foo.py, alors votre script de configuration peut être aussi simple que cela:
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules=['foo'],
)
Pour créer une distribution source pour ce module, vous devez créer un script d'installation, setup.py, contenant le code ci-dessus, et exécuter cette commande à partir d'un terminal:
python setup.py sdist
sdist va créer un fichier d'archive (par exemple, une archive tar sur Unix, un fichier ZIP sous Windows) contenant votre script d'installation setup.py et votre module foo.py. Le fichier d'archive s'appellera foo-1.0.tar.gz (ou .zip) et décompressera dans un répertoire foo-1.0.
Si un utilisateur souhaite installer votre module foo, il lui suffit de télécharger foo-1.0.tar.gz (ou .zip), de le décompresser et, à partir du répertoire foo-1.0, de l'exécuter.
python setup.py install
Ajout de scripts de ligne de commande à votre package python
Les scripts de ligne de commande dans les packages python sont communs. Vous pouvez organiser votre paquet de telle manière que lorsqu'un utilisateur installe le paquet, le script sera disponible sur son chemin.
Si vous aviez le paquet de greetings
qui avait le script de ligne de commande hello_world.py
.
greetings/
greetings/
__init__.py
hello_world.py
Vous pouvez exécuter ce script en exécutant:
python greetings/greetings/hello_world.py
Cependant, si vous souhaitez le lancer comme ceci:
hello_world.py
Vous pouvez y parvenir en ajoutant des scripts
à votre setup()
dans setup.py
comme ceci:
from setuptools import setup
setup(
name='greetings',
scripts=['hello_world.py']
)
Lorsque vous installez le package de salutations maintenant, hello_world.py
sera ajouté à votre chemin.
Une autre possibilité serait d'ajouter un point d'entrée:
entry_points={'console_scripts': ['greetings=greetings.hello_world:main']}
De cette façon, il vous suffit de le lancer comme:
greetings
Utilisation des métadonnées du contrôle de code source dans setup.py
setuptools_scm
est un paquet officiellement béni qui peut utiliser les métadonnées Git ou Mercurial pour déterminer le numéro de version de votre paquet et trouver les paquets Python et les données de paquet à inclure.
from setuptools import setup, find_packages
setup(
setup_requires=['setuptools_scm'],
use_scm_version=True,
packages=find_packages(),
include_package_data=True,
)
Cet exemple utilise les deux fonctionnalités; pour utiliser uniquement les métadonnées SCM pour la version, remplacez l'appel à find_packages()
par votre liste de packages manuelle ou utilisez uniquement l'outil de recherche de package, supprimez use_scm_version=True
.
Ajout d'options d'installation
Comme on l'a vu dans les exemples précédents, l'utilisation de base de ce script est la suivante:
python setup.py install
Mais il y a encore plus d'options, comme installer le paquet et avoir la possibilité de changer le code et de le tester sans avoir à le réinstaller. Ceci est fait en utilisant:
python setup.py develop
Si vous souhaitez effectuer des actions spécifiques telles que la compilation d'une documentation Sphinx ou la construction d'un code fortran , vous pouvez créer votre propre option comme celle-ci:
cmdclasses = dict()
class BuildSphinx(Command):
"""Build Sphinx documentation."""
description = 'Build Sphinx documentation'
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
import sphinx
sphinx.build_main(['setup.py', '-b', 'html', './doc', './doc/_build/html'])
sphinx.build_main(['setup.py', '-b', 'man', './doc', './doc/_build/man'])
cmdclasses['build_sphinx'] = BuildSphinx
setup(
...
cmdclass=cmdclasses,
)
initialize_options
et finalize_options
seront exécutés avant et après la fonction d' run
, comme leur nom l'indique.
Après cela, vous pourrez appeler votre option:
python setup.py build_sphinx