Quelqu'un peut-il expliquer ce qu'est setup.py
et comment il peut être configuré ou utilisé?
Quelqu'un peut-il expliquer ce qu'est setup.py
et comment il peut être configuré ou utilisé?
Réponses:
setup.py
est un fichier python, qui vous indique généralement que le module / package que vous êtes sur le point d'installer a été empaqueté et distribué avec Distutils, qui est la norme pour la distribution des modules Python.
Cela vous permet d'installer facilement des packages Python. Souvent, il suffit d'écrire:
$ pip install .
pip
utilisera setup.py pour installer votre module. Évitez d'appeler setup.py
directement.
https://docs.python.org/3/installing/index.html#installing-index
setup.py
fichier.
Cela aide à installer un package python foo
sur votre machine (peut également l'être virtualenv
) afin que vous puissiez importer le package à foo
partir d'autres projets et également à partir des invites [I] Python.
Il fait le travail similaire de pip
, easy_install
etc.,
En utilisant setup.py
Commençons par quelques définitions:
Package - Un dossier / répertoire qui contient un __init__.py
fichier.
Module - Un fichier python valide avec une .py
extension.
Distribution - Lien entre un package et d'autres packages et modules .
Supposons que vous souhaitiez installer un package nommé foo
. Alors tu fais,
$ git clone https://github.com/user/foo
$ cd foo
$ python setup.py install
Au lieu de cela, si vous ne souhaitez pas réellement l'installer mais souhaitez tout de même l'utiliser. Alors fais,
$ python setup.py develop
Cette commande créera des liens symboliques vers le répertoire source dans les packages de site au lieu de copier des choses. Pour cette raison, il est assez rapide (en particulier pour les gros colis).
Créer setup.py
Si vous avez votre arborescence de packages comme,
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
└── setup.py
Ensuite, vous effectuez les opérations suivantes dans votre setup.py
script afin qu'il puisse être installé sur une machine:
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='foomail@foo.com',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
)
Au lieu de cela, si votre arborescence de packages est plus complexe comme celle ci-dessous:
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
├── scripts
│ ├── cool
│ └── skype
└── setup.py
Ensuite, votre setup.py
dans ce cas serait comme:
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='foomail@foo.com',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
Ajoutez plus de choses à ( setup.py
) et rendez-le décent:
from setuptools import setup
with open("README", 'r') as f:
long_description = f.read()
setup(
name='foo',
version='1.0',
description='A useful module',
license="MIT",
long_description=long_description,
author='Man Foo',
author_email='foomail@foo.com',
url="http://www.foopackage.com/",
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
Le long_description
est utilisé dans pypi.org comme description README de votre paquet.
Et enfin, vous êtes maintenant prêt à télécharger votre package sur PyPi.org afin que d'autres puissent installer votre package à l'aide pip install yourpackage
.
La première étape consiste à réclamer le nom et l'espace de votre package dans pypi en utilisant:
$ python setup.py register
Une fois le nom de votre colis enregistré, personne ne peut le réclamer ou l'utiliser. Après une inscription réussie, vous devez y télécharger votre package (dans le cloud) par,
$ python setup.py upload
En option, vous pouvez également signer votre colis avec GPG
par,
$ python setup.py --sign upload
Bonus : Voir un échantillon setup.py
d'un vrai projet ici:torchvision-setup.py
requests
) a ce projet pour donner explicitement un bon exemple de setup.py - github.com/kennethreitz/setup.py
setup.py
est la réponse de Python à un programme d'installation et à un make
fichier multi-plateforme .
Si vous connaissez les installations en ligne de commande, cela se make && make install
traduit par python setup.py build && python setup.py install
.
Certains packages sont en pur Python et ne sont compilés qu'en octets. D'autres peuvent contenir du code natif, qui nécessitera un compilateur natif (comme gcc
ou cl
) et un module d'interface Python (comme swig
ou pyrex
).
python setup.py install
s'exécute en fait en python setup.py build
premier (vous n'avez donc pas besoin de les exécuter séparément sauf dans des cas spécifiques). Je crois qu'il make
faut toujours exécuter manuellement avant d'exécuter make install
.
make
fait, ne nécessite aucun paramètre (ou ordre) spécifique: c'est au créateur de déterminer Makefile
quelles "cibles" sont disponibles (et dans quel ordre elles doivent être invoquées). Étant donné que les Makefile
s bare ne sont (généralement) pas très portables, ils ont tendance à être générés à l'aide de commandes telles que ./configure
(autotools) ou cmake .
(cmake) et c'est à ces programmes de définir si vous devez exécuter explicitement make
avant make install
ou non.
Si vous avez téléchargé un package contenant "setup.py" dans le dossier racine, vous pouvez l'installer en exécutant
python setup.py install
Si vous développez un projet et vous demandez à quoi ce fichier est utile, consultez la documentation Python sur l'écriture du script d'installation
setup.py
est un script Python qui est généralement livré avec des bibliothèques ou des programmes, écrits dans ce langage. Son but est l'installation correcte du logiciel.
De nombreux packages utilisent le distutils
framework en conjonction avec setup.py
.
setup.py peut être utilisé dans deux scénarios. Premièrement, vous souhaitez installer un package Python. Deuxièmement, vous souhaitez créer votre propre package Python. Habituellement, le package Python standard contient quelques fichiers importants tels que setup.py, setup.cfg et Manifest.in. Lorsque vous créez le package Python, ces trois fichiers détermineront le (contenu dans PKG-INFO sous le dossier egg-info), la version, la description, les autres installations requises (généralement dans le fichier .txt) et quelques autres paramètres. setup.cfg est lu par setup.py lors de la création du package (peut être tar.gz). Manifest.in est l'endroit où vous pouvez définir ce qui doit être inclus dans votre package. Quoi qu'il en soit, vous pouvez faire beaucoup de choses en utilisant setup.py comme
python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo] (to upload package to pypi or local repo)
Il existe de nombreuses autres commandes qui pourraient être utilisées avec setup.py. pour aider
python setup.py --help-commands
python setup.py --help-commands
. Très utile pour creuser dans setup.py.
Lorsque vous téléchargez un package avec setup.py
ouvrez votre terminal (Mac, Linux) ou invite de commande (Windows). En cd
vous aidant du bouton Tab et en vous aidant, définissez le chemin d'accès au dossier dans lequel vous avez téléchargé le fichier et où se trouve setup.py
:
iMac:~ user $ cd path/pakagefolderwithsetupfile/
Appuyez sur Entrée, vous devriez voir quelque chose comme ceci:
iMac:pakagefolderwithsetupfile user$
Tapez ensuite après ceci python setup.py install
:
iMac:pakagefolderwithsetupfile user$ python setup.py install
Appuyez sur enter
. Terminé!
Pour installer un package Python que vous avez téléchargé, vous extrayez l'archive et exécutez le script setup.py à l'intérieur:
python setup.py install
Pour moi, cela a toujours semblé étrange. Il serait plus naturel de pointer un gestionnaire de paquets vers le téléchargement, comme on le ferait dans Ruby et Nodejs, par exemple.gem install rails-4.1.1.gem
Un gestionnaire de paquets est également plus confortable, car il est familier et fiable. En revanche, chacun setup.py
est nouveau, car il est spécifique au package. Il exige la foi dans la convention "Je fais confiance à ce setup.py prend les mêmes commandes que d'autres que j'ai utilisées dans le passé". C'est une taxe regrettable sur la volonté mentale.
Je ne dis pas que le flux de travail setup.py est moins sécurisé qu'un gestionnaire de paquets (je comprends que Pip exécute simplement setup.py à l'intérieur), mais je pense certainement que c'est maladroit et discordant. Il y a une harmonie entre les commandes et la même application du gestionnaire de paquets. Vous pourriez même en devenir friand.
setup.py
est un fichier Python comme les autres. Il peut prendre n'importe quel nom, sauf par convention qu'il est nommé de setup.py
sorte qu'il n'y ait pas de procédure différente avec chaque script.
Le plus souvent setup.py
est utilisé pour installer un module Python mais pour servir à d'autres fins:
Modules:
Il s'agit peut-être de l'utilisation la plus connue des setup.py
modules. Bien qu'elles puissent être installées à l'aide pip
, les anciennes versions de Python n'incluaient pas pip
par défaut et devaient être installées séparément.
Si vous vouliez installer un module mais ne vouliez pas l'installer pip
, à peu près la seule alternative était d'installer le module à partir d'un setup.py
fichier. Cela pourrait être réalisé via python setup.py install
. Cela installerait le module Python dans le dictionnaire racine (sans pip
, easy_install
ect).
Cette méthode est souvent utilisée en cas d' pip
échec. Par exemple, si la version Python correcte du package souhaité n'est pas disponible via pip
peut-être parce qu'elle n'est plus maintenue, le téléchargement de la source et son exécution python setup.py install
effectueraient la même chose, sauf dans le cas où des binaires compilés sont requis (mais ignorera le Version Python - sauf si une erreur est retournée).
Une autre utilisation de setup.py
est d'installer un paquet depuis la source. Si un module est encore en cours de développement, les fichiers de roue ne seront pas disponibles et la seule façon d'installer est d'installer directement depuis la source.
Construire des extensions Python:
Lorsqu'un module a été construit, il peut être converti en module prêt à être distribué à l'aide d'un script de configuration distutils . Une fois construits, ceux-ci peuvent être installés à l'aide de la commande ci-dessus.
Un script d'installation est facile à construire et une fois que le fichier a été correctement configuré et peut être compilé en exécutant python setup.py build
(voir le lien pour toutes les commandes).
Encore une fois, il est nommé setup.py
pour sa facilité d'utilisation et par convention, mais peut prendre n'importe quel nom.
Cython:
Une autre utilisation célèbre des setup.py
fichiers comprend les extensions compilées. Ceux-ci nécessitent un script de configuration avec des valeurs définies par l'utilisateur. Ils permettent une exécution rapide (mais une fois compilée dépend de la plate-forme). Voici un exemple simple de la documentation :
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'Hello world app',
ext_modules = cythonize("hello.pyx"),
)
Cela peut être compilé via python setup.py build
Cx_Freeze:
Un autre module nécessitant un script d'installation est cx_Freeze
. Cela convertit le script Python en exécutables. Cela permet à de nombreuses commandes telles que les descriptions, les noms, les icônes, les packages d'inclure, d'exclure ect et une fois exécutées produira une application distribuable. Un exemple tiré de la documentation :
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base)])
Cela peut être compilé via python setup.py build
.
Alors qu'est-ce qu'un setup.py
fichier?
C'est tout simplement un script qui construit ou configure quelque chose dans l'environnement Python.
Un package, lorsqu'il est distribué, ne doit contenir qu'un seul script de configuration, mais il n'est pas rare d'en combiner plusieurs en un seul script de configuration. Notez que cela implique souvent distutils
mais pas toujours (comme je l'ai montré dans mon dernier exemple). La chose à retenir est simplement de configurer le package / script Python d'une manière ou d'une autre.
Il prend le nom pour que la même commande puisse toujours être utilisée lors de la construction ou de l'installation.
Pour simplifier, setup.py est exécuté comme "__main__"
lorsque vous appelez les fonctions d'installation les autres réponses mentionnées. Dans setup.py, vous devez mettre tout le nécessaire pour installer votre package.
Les deux sections suivantes décrivent deux choses que de nombreux modules setup.py ont.
Cette fonction vous permet de spécifier des attributs de projet comme le nom du projet, la version .... Plus important encore, cette fonction vous permet d'installer d'autres fonctions si elles sont correctement packagées. Voir cette page Web pour un exemple de setuptools.setup
Ces attributs de setuptools.setup permettent d'installer ces types de packages:
Packages importés dans votre projet et répertoriés dans PyPI à l' aide de setuptools.findpackages :
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
Les packages ne sont pas dans PyPI , mais peuvent être téléchargés à partir d'une URL à l'aide de dependency_links
dependency_links=["http://peak.telecommunity.com/snapshots/",]
Dans un monde idéal, setuptools.setup
gérerait tout pour vous. Malheureusement, ce n'est pas toujours le cas. Parfois, vous devez faire des choses spécifiques, comme installer des dépendances avec la commande subprocess , pour obtenir le système sur lequel vous installez dans le bon état pour votre package. Essayez d'éviter cela, ces fonctions prêtent à confusion et diffèrent souvent entre le système d'exploitation et même la distribution .