Question Qu'est-ce que setup.py?


Quelqu'un peut-il s'il vous plaît expliquer, ce qui est setup.py et comment peut-il être configuré ou utilisé?


586
2017-09-24 14:16


origine


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 paquets Python. Souvent, il suffit d'écrire:

$ python setup.py install

et le module va s'installer.

http://docs.python.org/install/index.html


384
2017-09-24 14:19



Cela aide à installer un paquet python foo sur votre machine (peut également être dans virtualenv) pour que vous puissiez importer le paquet foo d'autres projets et aussi des [I] invites Python.

Il fait le travail similaire de pip, easy_install etc.,


En utilisant setup.py 

Commençons par quelques définitions:

Paquet - Un dossier / répertoire contenant __init__.py fichier.
Module  - Un fichier python valide avec .py extension.
Distribution - Comment on paquet concerne d'autres paquets et modules.

Disons que vous voulez installer un paquet nommé foo. Alors vous faites,

$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

Au lieu de cela, si vous ne voulez pas l'installer, mais que vous voulez l'utiliser. Alors fais,

$ python setup.py develop  

Cette commande va créer des liens symboliques vers le répertoire source dans les paquets de sites au lieu de copier des choses. Pour cette raison, il est assez rapide (en particulier pour les gros paquets).


Créer setup.py 

Si vous avez votre arbre de paquetage,

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

Ensuite, vous faites ce qui suit 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',
           ]
)

Ajouter plus de choses à (setup.py) & le rendre 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 la description README de votre paquet.


Et enfin, vous êtes maintenant prêt à télécharger votre paquet à PyPi.org afin que les autres puissent installer votre paquet en utilisant pip install yourpackage.

La première étape consiste à demander le nom et l'espace de votre paquet en pypi en utilisant:

$ python setup.py register

Une fois votre nom de package enregistré, personne ne peut le revendiquer ou l'utiliser. Après une inscription réussie, vous devez télécharger votre paquet là (dans le nuage) par,

$ python setup.py upload

En option, vous pouvez également signer votre colis avec GPG par,

$ python setup.py --sign upload

Prime: Voir un échantillon setup.py d'un vrai projet ici: torchvision-setup.py


156
2017-10-01 22:04



setup.py est la réponse de Python à un programme d'installation multi-plateforme et make fichier.

Si vous connaissez les installations en ligne de commande, alors make && make install Se traduit par python setup.py build && python setup.py install.

Certains paquets sont en pure Python, et sont seulement compilés en octets. D'autres peuvent contenir du code natif, ce qui nécessitera un compilateur natif (comme gcc ou cl) et un module d'interfaçage Python (comme swig ou pyrex).


72
2017-09-24 15:29



Si vous avez téléchargé le fichier "setup.py" dans le dossier racine, vous pouvez l'installer en exécutant

python setup.py install

Si vous développez un projet et que vous vous demandez à quoi sert ce fichier, vérifiez Documentation Python sur l'écriture du script d'installation


43
2017-09-24 14:21



setup.py est un script Python généralement livré avec des bibliothèques ou des programmes écrits dans cette langue. Son but est l'installation correcte du logiciel.

De nombreux paquets utilisent le distutils cadre en conjonction avec setup.py.

http://docs.python.org/distutils/


15
2017-09-24 14:21



setup.py peut être utilisé dans deux scénarios. Premièrement, vous voulez installer un paquet Python. Deuxièmement, vous voulez créer votre propre paquet Python. Habituellement, le paquet Python standard contient deux fichiers importants comme setup.py, setup.cfg et Manifest.in. Lorsque vous créez le package Python, ces trois fichiers déterminent le nom (contenu dans PKG-INFO sous le dossier egg-info), la version, la description, les autres installations requises (généralement au format .txt) et quelques autres paramètres. setup.cfg est lu par setup.py pendant la création du paquet (peut être tar.gz). Manifest.in est où vous pouvez définir ce qui devrait être inclus dans votre paquet. De toute façon, 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 y a beaucoup d'autres commandes qui pourraient être utilisées avec setup.py. pour aider

python setup.py --help-commands

13
2018-04-18 16:29



Lorsque vous téléchargez un package avec setup.py Ouvrez votre Terminal (Mac, Linux) ou Invite de commandes (Windows). En utilisant cd  et vous aider avec le bouton Tab définir le chemin à droite du dossier où vous avez téléchargé le fichier et où il y a setup.py :

iMac:~ user $ cd path/pakagefolderwithsetupfile/

Appuyez sur Entrée, vous devriez voir quelque chose comme ceci:

iMac:pakagefolderwithsetupfile user$

Puis tapez après python setup.py install :

iMac:pakagefolderwithsetupfile user$ python setup.py install

presse enter. Terminé!


6
2017-09-18 10:49



Pour installer un paquet Python que vous avez téléchargé, vous devez extraire l'archive et lancer 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 au 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 plus à l'aise, car il est familier et fiable. D'autre part, chaque setup.py est nouveau, car il est spécifique à l'emballage. Il exige la foi dans la convention "Je crois que setup.py prend les mêmes commandes que celles que j'ai utilisées dans le passé". C'est une taxe regrettable sur la volonté mentale.

Je ne dis pas que le workflow 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 que c'est inconvenant et choquant. Il y a une harmonie entre les commandes et la même application de gestionnaire de paquets. Vous pourriez même l'aimer.


6
2018-06-02 15:52



Pour simplifier, setup.py est exécuté en tant que "__main__" quand vous appelez le installer des fonctions les autres réponses mentionnées. À l'intérieur de setup.py, vous devriez mettre tout ce qu'il faut pour installer votre paquet.

Les fonctions courantes de setup.py

Les deux sections suivantes traitent de deux choses que de nombreux modules setup.py ont.

setuptools.setup

Cette fonction vous permet de spécifier attributs du projet comme le nom du projet, la version .... Plus important encore, cette fonction vous permet d'installer d'autres fonctions si elles sont correctement emballées. Voir cette page pour un exemple de setuptools.setup

Ces attributs de setuptools.setup permettent d'installer ces types de paquets:

Fonctions personnalisées

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 le sous-processus commande, pour obtenir le système sur lequel vous installez dans l'état correct pour votre paquet. Essayez d'éviter cela, ces fonctions deviennent confuses et diffèrent souvent entre OS et même Distribution.


0
2018-02-15 16:06



setup.py est un fichier Python comme les autres. Il peut prendre n'importe quel nom, sauf par convention, il est nommé setup.py de sorte qu'il n'y a pas une procédure différente avec chaque script.

Le plus souvent setup.py est utilisé pour installer un module Python mais à d'autres fins:

Modules:

Peut-être que c'est l'utilisation la plus célèbre de setup.py est en modules. Bien qu'ils puissent être installés en utilisant pip, les anciennes versions de Python ne comprenaient pas pip par défaut et ils devaient être installés séparément.

Si vous vouliez installer un module mais que vous ne vouliez pas installer pip, à peu près la seule alternative était d'installer le module de 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 quand pip va échouer. Par exemple si la version correcte de Python du paquet désiré n'est pas disponible via pippeut-être parce qu'il n'est plus maintenu, en téléchargeant la source et en cours d'exécution python setup.py install effectuerait la même chose, sauf dans le cas de binaires compilés sont requis, (mais ne tiendra pas compte de la version Python - sauf si une erreur est renvoyée).

Une autre utilisation de setup.py est d'installer un paquet de la source. Si un module est encore en cours de développement, les fichiers de roues ne seront pas disponibles et la seule façon d'installer est d'installer directement à partir de la source.

Construire des extensions Python:

Quand un module a été construit, il peut être converti en module prêt pour la distribution en utilisant un script d'installation de distutils. Une fois construits, ceux-ci peuvent être installés en utilisant la commande ci-dessus.

Un script d'installation est facile à créer 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 la facilité d'utilisation et par convention, mais peut prendre n'importe quel nom.

Cython:

Une autre utilisation célèbre de setup.py les fichiers incluent des extensions compilées. Ceux-ci nécessitent un script d'installation avec des valeurs définies par l'utilisateur. Ils permettent une exécution rapide (mais une fois compilé 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 de configuration 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 paquetages d'inclure, d'exclure ect et une fois exécuté produira une application distribuable. Un exemple 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 paquet distribué ne doit contenir qu'un seul script de configuration, mais il n'est pas rare de 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 paquet / script Python.

Il prend le nom afin que la même commande puisse toujours être utilisée lors de la construction ou de l'installation.


0
2018-03-14 00:31