Python Language
setup.py
Ricerca…
Parametri
Parametro | uso |
---|---|
name | Nome della tua distribuzione. |
version | Stringa di versione della tua distribuzione. |
packages | Elenco di pacchetti Python (ovvero, directory contenenti moduli) da includere. Questo può essere specificato manualmente, ma in genere viene utilizzata una chiamata a setuptools.find_packages() . |
py_modules | Elenco dei moduli Python di primo livello (ovvero, singoli file .py ) da includere. |
Osservazioni
Per ulteriori informazioni sulla confezione Python vedere:
Per scrivere pacchetti ufficiali c'è una guida per l'utente della confezione .
Scopo di setup.py
Lo script di installazione è il centro di tutte le attività nella costruzione, distribuzione e installazione di moduli usando le Distutils. Lo scopo è la corretta installazione del software.
Se tutto quello che vuoi fare è distribuire un modulo chiamato foo, contenuto in un file foo.py, allora lo script di installazione può essere semplice come questo:
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules=['foo'],
)
Per creare una distribuzione di origine per questo modulo, devi creare uno script di installazione, setup.py, contenente il codice precedente ed eseguire questo comando da un terminale:
python setup.py sdist
sdist creerà un file di archivio (ad esempio, tarball su Unix, file ZIP su Windows) contenente lo script di installazione setup.py e il modulo foo.py. Il file di archivio sarà chiamato foo-1.0.tar.gz (o .zip) e decomprimerà in una directory foo-1.0.
Se un utente finale desidera installare il tuo modulo foo, tutto ciò che deve fare è scaricare foo-1.0.tar.gz (o .zip), decomprimerlo e-dalla directory foo-1.0-run
python setup.py install
Aggiunta di script da riga di comando al pacchetto python
Gli script della riga di comando all'interno dei pacchetti python sono comuni. Puoi organizzare il tuo pacchetto in modo tale che quando un utente installa il pacchetto, lo script sarà disponibile sul loro percorso.
Se avessi il pacchetto dei greetings
lo script della riga di comando hello_world.py
.
greetings/
greetings/
__init__.py
hello_world.py
È possibile eseguire quello script eseguendo:
python greetings/greetings/hello_world.py
Tuttavia se desideri eseguirlo in questo modo:
hello_world.py
È possibile ottenere ciò aggiungendo scripts
al proprio setup()
in setup.py
questo modo:
from setuptools import setup
setup(
name='greetings',
scripts=['hello_world.py']
)
Quando installi il pacchetto di auguri ora, hello_world.py
verrà aggiunto al tuo percorso.
Un'altra possibilità potrebbe essere quella di aggiungere un punto di ingresso:
entry_points={'console_scripts': ['greetings=greetings.hello_world:main']}
In questo modo devi solo eseguirlo come:
greetings
Utilizzo dei metadati del controllo del codice sorgente in setup.py
setuptools_scm
è un pacchetto ufficialmente benedetto che può utilizzare i metadati Git o Mercurial per determinare il numero di versione del pacchetto e trovare i pacchetti Python e i dati del pacchetto da includere in esso.
from setuptools import setup, find_packages
setup(
setup_requires=['setuptools_scm'],
use_scm_version=True,
packages=find_packages(),
include_package_data=True,
)
Questo esempio utilizza entrambe le funzionalità; per utilizzare solo i metadati SCM per la versione, sostituire la chiamata a find_packages()
con l'elenco dei pacchetti manuale o utilizzare solo il finder dei pacchetti, rimuovere use_scm_version=True
.
Aggiunta di opzioni di installazione
Come visto negli esempi precedenti, l'uso di base di questo script è:
python setup.py install
Ma ci sono ancora più opzioni, come installare il pacchetto e avere la possibilità di cambiare il codice e testarlo senza doverlo reinstallare. Questo è fatto usando:
python setup.py develop
Se vuoi eseguire azioni specifiche come compilare una documentazione di Sphinx o creare un codice fortran , puoi creare la tua opzione in questo modo:
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
e finalize_options
saranno eseguite prima e dopo la funzione di run
come i loro nomi lo suggeriscono.
Dopodiché, potrai chiamare la tua opzione:
python setup.py build_sphinx