Question

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

Était-ce utile?

La solution

setup.py est un fichier python, qui vous indique généralement que le module / package que vous êtes sur le point d'installation a été emballé et distribué avec distutils, qui est la norme pour la distribution de modules Python.

Cela vous permet d'installer facilement les paquets Python. il est souvent suffit d'écrire:

$ pip install . 

pip utilisera setup.py pour installer votre module. Évitez d'appeler directement setup.py.

https://docs.python.org/3/installing/ index.html # installation-index

Autres conseils

Il aide à installer un paquet python foo sur votre machine (peut également être virtualenv) de sorte que vous pouvez importer le foo paquet d'autres projets et aussi de [I] Python demande.

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


Utilisation setup.py

Commençons par quelques définitions:

Forfait -. Un dossier / répertoire contenant le fichier __init__.py
Module -. Un fichier python valide avec l'extension .py
- Comment package se rapporte à d'autres paquets et modules .

Disons que vous voulez installer un package nommé foo. Ensuite, vous faites,

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

Au lieu de cela, si vous ne voulez pas installer réellement mais souhaitez tout de même l'utiliser. Ensuite, faites,

$ python setup.py develop  

Cette commande va créer des liens symboliques vers le répertoire source dans le site-packages au lieu des choses de copie. En raison de cela, il est très rapide (en particulier pour les gros emballages).


Création setup.py

Si vous avez votre arbre de paquets 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 arbre de package est plus complexe comme celui ci-dessous:

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

Alors, 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) et 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é comme la description README de votre paquet dans pypi.org .


Et enfin, vous êtes maintenant prêt à télécharger votre paquet PyPi.org afin que les autres peuvent installer votre package à l'aide pip install yourpackage.

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

$ python setup.py register

Une fois que votre nom de package est enregistré, personne ne peut prétendre ou l'utiliser. Après l'inscription, vous devez télécharger votre paquet là-bas (vers le cloud) par,

$ python setup.py upload

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

$ python setup.py --sign upload

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

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

Si vous êtes familier avec les installations de ligne de commande, puis make && make install se traduit par python setup.py build && python setup.py install.

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

Si vous package téléchargé qui a « 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 ce que ce fichier est utile, consultez documentation Python sur écrire le script d'installation

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

Beaucoup de paquets utilisent le cadre de distutils conjointement avec setup.py.

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

setup.py peut être utilisé dans deux scénarios, d'abord, vous voulez installer un package Python. Deuxièmement, vous voulez créer votre propre package Python. Généralement standard package Python a quelques fichiers importants comme 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-dossier oeuf info) nom, version, description, d'autres installations nécessaires (généralement dans le fichier txt) et quelques autres paramètres. setup.cfg est lu par setup.py tout est créé ensemble (pourrait être tar.gz). Manifest.in est où vous pouvez définir ce qui doit être inclus dans votre forfait. Quoi qu'il en soit, vous pouvez le faire tas de choses en utilisant comme setup.py

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 tas d'autres commandes qui pourraient être utilisées avec setup.py. de l'aide

python setup.py --help-commands

Lorsque vous téléchargez un package avec setup.py ouvrir votre terminal (Mac, Linux) ou Invite de commandes (Windows). En utilisant cd et vous aider avec le bouton Tab définir le chemin droit vers le 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$

Ensuite, tapez après python setup.py install:

iMac:pakagefolderwithsetupfile user$ python setup.py install

enter de presse. Fait!

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 eu le sentiment étrange. Il serait plus naturel de pointer un gestionnaire de paquets au téléchargement, comme on le ferait en Ruby et NodeJS, par exemple. gem install rails-4.1.1.gem

Un gestionnaire de paquets est plus à l'aise aussi, car il est familier et fiable. D'autre part, chaque setup.py est nouvelle, car il est spécifique à l'emballage. Il exige la foi dans la convention «J'espère que cette setup.py prend les mêmes commandes que d'autres, je l'ai utilisé dans le passé ». C'est une taxe regrettable sur la volonté mentale.

Je ne dis pas que le flux de travail de setup.py est moins sécurisé qu'un gestionnaire de paquets (je comprends Pip court juste le setup.py intérieur), mais certainement je pense qu'il est awkard et discordante. Il y a une harmonie aux commandes tout être à la même application de gestionnaire de paquets. Vous pouvez même pousser il aime.

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

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

Modules:

est peut-être l'utilisation la plus célèbre de setup.py est en modules. Bien qu'ils puissent être installés à l'aide des versions pip, vieux Python ne sont pip par défaut et dont ils ont besoin pour être installé séparément.

Si vous voulez installer un module, mais ne souhaitez pas installer pip, à peu près la seule alternative était d'installer le module à partir du fichier setup.py. Cela pourrait se faire par l'intermédiaire python setup.py install. Cela installer le module Python au dictionnaire racine (sans pip, easy_install ect).

Cette méthode est souvent utilisée lorsque pip échouera. Par exemple, si la version Python correcte du package souhaité n'est pas disponible via pipperhaps car il n'est plus maintenu,, le téléchargement de la source et en cours d'exécution python setup.py install remplirait la même chose, sauf dans le cas des binaires compilés sont obligatoires, (mais ne tient pas compte la version Python -Sauf une erreur est renvoyée).

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

extensions du bâtiment Python:

Quand un module a été construit il peut être converti dans le module prêt à être distribué en utilisant un distutils script d'installation . Une fois construit 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 la facilité d'utilisation et par convention, mais peut prendre un nom.

Cython:

Une autre utilisation célèbre des fichiers setup.py comprennent compilé des extensions. Ceux-ci ont besoin d'un script d'installation avec les valeurs définies par l'utilisateur. Ils permettent rapidement (mais une fois compilé dépendent plate-forme) exécution. 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é par python setup.py build

Cx_Freeze:

Un autre module nécessitant un script de configuration est cx_Freeze. Ce script Python convertit à executables. Cela permet à de nombreuses commandes telles que des descriptions, des noms, des icônes, des paquets à inclure, exclure ect et une fois que l'exécution produira une application distribuable. Un exemple de la :

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é par python setup.py build.

Quel est donc un fichier setup.py?

Tout simplement il est un script qui construit ou configure quelque chose dans l'environnement Python.

Un paquet quand distribué doit contenir un seul script de configuration, mais il est pas rare de combiner plusieurs ensemble dans un seul script d'installation. Notez cela implique souvent distutils mais pas toujours (comme je l'ai montré dans mon dernier exemple). La chose à retenir, il configure simplement package Python / script d'une certaine façon.

Il prend le nom pour la même commande peut toujours être utilisé lors de la construction ou l'installation.

Pour faire simple, setup.py est exécuté comme "__main__" lorsque vous appelez fonctions d'installation les autres réponses mentionnées. A l'intérieur setup.py, vous devez mettre tout le nécessaire pour installer votre package.

Fonctions setup.py commun

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

setuptools.setup

Cette fonction vous permet de spécifier projet attributs comme le nom de la projet, la version .... plus important encore, cette fonction vous permet d'installer d'autres fonctions si elles sont correctement emballés. Voir cette page pour un exemple de setuptools.setup
Ces attributs permettent de setuptools.setup l'installation de ces types de paquets:

  • Les paquets qui sont importés à votre projet et répertoriés dans PyPI utilisant setuptools.findpackages :

    packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])

  • Forfaits pas PyPI , mais peut être téléchargé à partir d'une URL à l'aide dependency_links

    dependency_links=["http://peak.telecommunity.com/snapshots/",]

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 l'installation de dépendances avec la commande sous-processus, pour obtenir le système que vous installez dans le bon état de votre colis. Essayez d'éviter cela, ces fonctions se confondre et diffèrent souvent entre OS et même .

scroll top