Python Language
setup.py
Sök…
parametrar
Parameter | Användande |
---|---|
name | Namnet på din distribution. |
version | Versionssträng för din distribution. |
packages | Lista över Python-paket (det vill säga kataloger som innehåller moduler) att inkludera. Detta kan specificeras manuellt, men ett samtal till setuptools.find_packages() används vanligtvis istället. |
py_modules | Lista över Python-moduler på toppnivå (det vill säga enstaka .py filer) att inkludera. |
Anmärkningar
För ytterligare information om pythonförpackning se:
För att skriva officiella paket finns en användarhandbok för förpackningar .
Syfte med setup.py
Installationsskriptet är mitten av all aktivitet i att bygga, distribuera och installera moduler med hjälp av Distutils. Syftet är att installationen av programvaran är korrekt.
Om allt du vill göra är att distribuera en modul som heter foo, som finns i en fil foo.py, kan ditt installationsskript vara så enkelt som det här:
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules=['foo'],
)
För att skapa en källfördelning för den här modulen, skapar du ett installationsskript, setup.py, som innehåller koden ovan, och kör detta kommando från en terminal:
python setup.py sdist
sdist skapar en arkivfil (t.ex. tarball på Unix, ZIP-fil i Windows) som innehåller ditt installationsskript setup.py och din modul foo.py. Arkivfilen kommer att ha namnet foo-1.0.tar.gz (eller .zip) och packas upp i en katalog foo-1.0.
Om en slutanvändare vill installera din foo-modul, allt hon behöver göra är att ladda ner foo-1.0.tar.gz (eller .zip), packa upp den och - från foo-1.0-katalogen - köra
python setup.py install
Lägga till kommandoradsskript till ditt pythonpaket
Kommandoradsskript i pythonpaket är vanliga. Du kan organisera ditt paket på ett sådant sätt att när en användare installerar paketet kommer skriptet att vara tillgängligt på deras väg.
Om du hade greetings
som hade kommandoradsskriptet hello_world.py
.
greetings/
greetings/
__init__.py
hello_world.py
Du kan köra skriptet genom att köra:
python greetings/greetings/hello_world.py
Men om du vill köra det så:
hello_world.py
Du kan uppnå detta genom att lägga till scripts
till din setup()
i setup.py
så här:
from setuptools import setup
setup(
name='greetings',
scripts=['hello_world.py']
)
När du installerar hälsningspaketet nu läggs hello_world.py
till på din sökväg.
En annan möjlighet skulle vara att lägga till en startpunkt:
entry_points={'console_scripts': ['greetings=greetings.hello_world:main']}
På det här sättet måste du bara köra det som:
greetings
Använda källkontrollmetadata i setup.py
setuptools_scm
är ett officiellt välsignat paket som kan använda Git- eller Mercurial-metadata för att bestämma versionnumret för ditt paket, och hitta Python-paket och paketdata att inkludera i det.
from setuptools import setup, find_packages
setup(
setup_requires=['setuptools_scm'],
use_scm_version=True,
packages=find_packages(),
include_package_data=True,
)
Detta exempel använder båda funktionerna; find_packages()
använda SCM-metadata för versionen, byt ut samtalet till find_packages()
med din manuella paketlista, eller om du bara använder paketvisaren, ta bort use_scm_version=True
.
Lägga till installationsalternativ
Som vi har sett i tidigare exempel är grundläggande användning av detta skript:
python setup.py install
Men det finns ännu fler alternativ, som att installera paketet och ha möjlighet att ändra koden och testa den utan att behöva installera om den igen. Detta görs med hjälp av:
python setup.py develop
Om du vill utföra specifika åtgärder som att sammanställa en Sphinx- dokumentation eller bygga fortran- kod, kan du skapa ditt eget alternativ på följande sätt:
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
och finalize_options
kommer att run
före och efter run
som deras namn antyder det.
Efter det kommer du att kunna ringa ditt alternativ:
python setup.py build_sphinx