Domanda

Qualcuno può spiegare, che cosa è setup.py e come può essere configurato o usato?

È stato utile?

Soluzione

setup.py è un file python, che di solito si dice che il modulo / pacchetto che si sta per installare è stato confezionato e distribuito con Distutils, che è lo standard per la distribuzione di moduli Python.

Questo consente di installare facilmente i pacchetti Python. Spesso è sufficiente scrivere:

$ pip install . 

pip utilizzerà setup.py per installare il modulo. Evitare di chiamare direttamente setup.py.

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

Altri suggerimenti

Aiuta a installare un pacchetto foo pitone sulla vostra macchina (può anche essere in virtualenv) in modo che è possibile importare il pacchetto foo da altri progetti e anche da [I] Python richiede.

Si fa il lavoro simile pip, easy_install ecc.,


Utilizzo setup.py

Cominciamo con alcune definizioni:

Package -. Una cartella / directory che contiene il file __init__.py
modulo -. Un file python valido con l'estensione .py
distribuzione - Come si pacchetto riguarda altri pacchetti e moduli .

Diciamo che si desidera installare un pacchetto chiamato foo. Poi si fa,

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

Al contrario, se non si vuole installare in realtà, ma ancora desidera usarlo. Poi fare,

$ python setup.py develop  

Questo comando creerà collegamenti simbolici alla directory di origine all'interno di site-packages invece di cose di copiatura. A causa di questo, è abbastanza veloce (in particolare per i grandi pacchetti).


Creazione setup.py

Se avete il vostro albero di pacchetti come,

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

Quindi, fate quanto segue nel setup.py script in modo che può essere installato su una macchina:

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
)

Al contrario, se il vostro albero del pacchetto è più complessa come quella qui sotto:

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

Poi, il setup.py in questo caso sarebbe come:

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',
           ]
)

Aggiungi più roba da (setup.py) & renderlo decente:

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',
           ]
)

Il long_description viene utilizzato in pypi.org come la descrizione README del pacchetto.


E, infine, si è ora pronti per caricare il tuo pacchetto per PyPi.org modo che altri possano installare il pacchetto utilizzando pip install yourpackage.

Il primo passo è quello di richiedere il nome del pacchetto e lo spazio in PyPI utilizzando:

$ python setup.py register

Una volta che il nome del pacchetto è registrato, nessuno può rivendicare o usarlo. Dopo la registrazione, è necessario caricare il proprio pacchetto lì (al cloud) da,

$ python setup.py upload

In alternativa, è possibile anche firmare il pacchetto con GPG da,

$ python setup.py --sign upload

Bonus : Vedere un campione setup.py da un vero e proprio progetto qui: torchvision-setup.py

setup.py è la risposta di Python ad un installatore multi-piattaforma e il file make.

Se si ha familiarità con le installazioni della riga di comando, quindi make && make install si traduce in python setup.py build && python setup.py install.

Alcuni pacchetti sono puri Python, e sono solo byte compilato. Altri possono contenere codice nativo, che richiederà un compilatore nativo (come gcc o cl) e un modulo di interfaccia Python (come swig o pyrex).

Se si è scaricato il pacchetto che ha "setup.py" nella cartella principale, è possibile installarlo eseguendo

python setup.py install

Se si sta sviluppando un progetto e si chiedono che cosa questo file è utile per controllare la documentazione Python scrivere il programma di installazione di script

setup.py è uno script Python che di solito è fornito con le librerie o programmi, scritti in quella lingua. Il suo scopo è la corretta installazione del software.

Molti pacchetti usano il quadro distutils in congiunzione con setup.py.

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

setup.py può essere utilizzato in due scenari, in primo luogo, si vuole installare un pacchetto di Python. In secondo luogo, si vuole creare il proprio pacchetto di Python. Di solito pacchetto standard di Python ha paio di file importanti come setup.py, setup.cfg e Manifest.in. Quando si crea il pacchetto di Python, questi tre file determineranno il (contenuto in PKG-INFO nella cartella uovo-info) nome, versione, descrizione, altre installazioni necessarie (di solito in file .txt) e pochi altri parametri. setup.cfg viene letto da setup.py mentre il pacchetto è stato creato (potrebbe essere tar.gz). Manifest.in è dove si può definire cosa dovrebbe essere incluso nel pacchetto. In ogni modo si può fare mucchio di roba usando setup.py come

python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo]  (to upload package to pypi or local repo)

Ci sono mucchio di altri comandi che potrebbero essere utilizzati con setup.py. aiuto

python setup.py --help-commands

Quando si scarica un pacchetto con setup.py aprire il Terminale (Mac, Linux) o Command Prompt (Windows). Utilizzando cd e aiutandovi con il tasto Tab impostare il percorso fino alla cartella in cui è stato scaricato il file e dove c'è setup.py:

iMac:~ user $ cd path/pakagefolderwithsetupfile/

Premere Invio, si dovrebbe vedere qualcosa di simile:

iMac:pakagefolderwithsetupfile user$

Quindi digitare dopo questo python setup.py install:

iMac:pakagefolderwithsetupfile user$ python setup.py install

Premere enter. Fatto!

Per installare un pacchetto di Python che hai scaricato, di estrarre l'archivio ed eseguire lo script setup.py interna:

python setup.py install

Per me, questo è sempre sentito strano. Sarebbe più naturale per indicare un gestore di pacchetti in download, come si farebbe in Ruby e Nodejs, ad es. gem install rails-4.1.1.gem

Un gestore di pacchetti è più comodo troppo, perché è familiare e affidabile. D'altra parte, ogni setup.py è romanzo, perché è specifico al pacchetto. Si richiede la fede in convenzione "Mi fido di questo setup.py prende gli stessi comandi come altri che ho usato in passato". Questa è una tassa sulla deplorevole forza di volontà mentale.

Non sto dicendo che il flusso di lavoro setup.py è meno sicuro di un gestore di pacchetti (capisco Pip esegue semplicemente il setup.py all'interno), ma certamente sento che è awkard e stridente. C'è un'armonia di tutto l'essere comandi alla stessa applicazione di gestione dei pacchetti. Si potrebbe anche crescere appassionato di esso.

setup.py è un file Python come tutti gli altri. Si può prendere qualsiasi nome, tranne che per convenzione prende il nome setup.py in modo che non ci sia una procedura diversa con ogni script.

La maggior parte spesso setup.py viene utilizzato per installare un modulo Python, ma di server per altri scopi:

Moduli:

Forse questo è l'uso più famoso di setup.py è in moduli. Anche se possono essere installati utilizzando pip, le vecchie versioni di Python non hanno incluso pip per impostazione predefinita e avevano bisogno di essere installato separatamente.

Se si voleva installare un modulo, ma non ha voluto installare pip, praticamente l'unica alternativa era quella di installare il modulo da file setup.py. Ciò potrebbe essere realizzato tramite python setup.py install. Ciò installare il modulo Python al dizionario radice (senza pip, easy_install ect).

Questo metodo è spesso utilizzato quando pip falliranno. Per esempio, se la versione di Python corretta del pacchetto desiderato non è disponibile tramite pipperhaps perché non è più mantenuto,, scaricando la fonte e l'esecuzione python setup.py install avrebbe compiuto la stessa cosa, tranne che nel caso di binari compilati sono necessari, (ma non terrà conto viene restituita la versione di Python -a meno un errore).

Un altro uso di setup.py è quello di installare un pacchetto da sorgente. Se un modulo è ancora in fase di sviluppo i file delle ruote non saranno disponibili e l'unico modo per installare è quello di installare dalla sorgente direttamente.

estensioni costruzione Python:

Quando un modulo è stato costruito può essere convertito in modulo pronto per la distribuzione utilizzando un script di installazione . Una volta costruiti questi possono essere installati utilizzando il comando sopra.

Uno script di installazione è facile da costruire e una volta che il file è stato correttamente configurato e può essere compilato eseguendo python setup.py build (vedi link per tutti i comandi).

Ancora una volta prende il nome setup.py per facilità d'uso e per convenzione, ma può assumere qualsiasi nome.

Cython:

Un altro uso famoso di file setup.py includono estensioni compilato. Questi richiedono uno script di installazione con i valori definiti dall'utente. Permettono veloce (ma una volta compilato sono dipendenti dalla piattaforma) esecuzione. Ecco un semplice esempio dal documentazione :

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world app',
    ext_modules = cythonize("hello.pyx"),
)

Questo può essere compilato tramite python setup.py build

Cx_Freeze:

Un altro modulo che richiede uno script di setup è cx_Freeze. Questo trasforma script Python per i file eseguibili. Questo permette a molti comandi come descrizioni, i nomi, le icone, i pacchetti da includere, escludere ect e una volta run produrrà un'applicazione distribuibile. Un esempio dal :

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)])

Questo può essere compilato tramite python setup.py build.

Che cosa è un file setup.py?

Molto semplicemente si tratta di uno script che costruisce o configura qualcosa nell'ambiente Python.

Un pacchetto quando distribuito deve contenere un solo script di installazione, ma non è raro di combinare diversi insieme in un singolo script di installazione. Avviso Questo comporta spesso distutils ma non sempre (come ho mostrato nel mio ultimo esempio). La cosa da ricordare è solo configura Python pacchetto / script in qualche modo.

Prende il nome in modo lo stesso comando può sempre essere usato durante la costruzione o l'installazione.

Per farla semplice, setup.py viene eseguito come "__main__" quando si chiama il installa funzioni le altre risposte menzionate. All'interno setup.py, si dovrebbe mettere tutto il necessario per l'installazione del pacchetto.

funzioni

setup.py comune

Le due sezioni seguenti discutono due cose molti moduli setup.py hanno.

setuptools.setup

Questa funzione consente di specificare gli attributi progetto come il nome del progetto, la versione .... Ancora più importante, questa funzione permette di installare altre funzioni se sono confezionati in modo corretto. Vedere il sito per un esempio di setuptools.setup
Questi attributi di setuptools.setup consentono l'installazione di questi tipi di pacchetti:

  • I pacchetti che vengono importati nel progetto e elencati nella PyPI utilizzando setuptools.findpackages :

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

  • I pacchetti non in PyPI , ma può essere scaricato da un URL utilizzando dependency_links

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

Le funzioni personalizzate

In un mondo ideale, sarebbe setuptools.setup gestire tutto per voi. Purtroppo questo non è sempre il caso. A volte è necessario fare le cose specifiche, come l'installazione delle dipendenze con il href="https://docs.python.org/2/library/subprocess.html" rel="nofollow noreferrer"> sottoprocesso comando OS e anche distribuzione .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top