Python Language
setup.py
Zoeken…
parameters
Parameter | Gebruik |
---|---|
name | Naam van uw distributie. |
version | Versiereeks van uw distributie. |
packages | Lijst met Python-pakketten (dat wil zeggen mappen met modules) die moeten worden opgenomen. Dit kan handmatig worden opgegeven, maar in plaats daarvan wordt meestal een aanroep naar setuptools.find_packages() gebruikt. |
py_modules | Lijst met Python-modules op het hoogste niveau (dat wil zeggen afzonderlijke .py bestanden) die moeten worden opgenomen. |
Opmerkingen
Voor meer informatie over python-verpakkingen, zie:
Voor het schrijven van officiële pakketten is er een gebruikershandleiding voor verpakkingen .
Doel van setup.py
Het installatiescript is het middelpunt van alle activiteiten bij het bouwen, distribueren en installeren van modules met behulp van de Distutils. Het doel is de juiste installatie van de software.
Als u alleen een module met de naam foo wilt verspreiden, die zich in een bestand foo.py bevindt, kan uw installatiescript zo eenvoudig zijn als dit:
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules=['foo'],
)
Als u een brondistributie voor deze module wilt maken, maakt u een installatiescript, setup.py, met de bovenstaande code en voert u deze opdracht uit vanaf een terminal:
python setup.py sdist
sdist zal een archiefbestand maken (bijv. tarball op Unix, ZIP-bestand op Windows) met uw installatiescript setup.py en uw module foo.py. Het archiefbestand krijgt de naam foo-1.0.tar.gz (of .zip) en wordt uitgepakt in een map foo-1.0.
Als een eindgebruiker uw foo-module wenst te installeren, hoeft hij alleen foo-1.0.tar.gz (of .zip) te downloaden, uit te pakken en - vanuit de foo-1.0-directory - uit te voeren
python setup.py install
Opdrachtregelscripts toevoegen aan uw python-pakket
Commandoregelscripts in python-pakketten zijn gebruikelijk. U kunt uw pakket zo organiseren dat wanneer een gebruiker het pakket installeert, het script op zijn pad beschikbaar is.
Als u het greetings
had met het opdrachtregelscript hello_world.py
.
greetings/
greetings/
__init__.py
hello_world.py
Je kunt dat script uitvoeren door het volgende uit te voeren:
python greetings/greetings/hello_world.py
Als u het echter als volgt wilt uitvoeren:
hello_world.py
U kunt dit bereiken door scripts
te voegen aan uw setup()
in setup.py
als volgt:
from setuptools import setup
setup(
name='greetings',
scripts=['hello_world.py']
)
Wanneer u het begroetingspakket nu installeert, wordt hello_world.py
aan uw pad toegevoegd.
Een andere mogelijkheid zou zijn om een entrypunt toe te voegen:
entry_points={'console_scripts': ['greetings=greetings.hello_world:main']}
Op deze manier moet je het gewoon uitvoeren zoals:
greetings
Metadata van bronbeheer gebruiken in setup.py
setuptools_scm
is een officieel gezegend pakket dat setuptools_scm
of Mercurial-metagegevens kan gebruiken om het versienummer van uw pakket te bepalen en Python-pakketten en pakketgegevens te vinden om erin op te nemen.
from setuptools import setup, find_packages
setup(
setup_requires=['setuptools_scm'],
use_scm_version=True,
packages=find_packages(),
include_package_data=True,
)
In dit voorbeeld worden beide functies gebruikt; om alleen SCM-metagegevens voor de versie te gebruiken, vervangt u de aanroep naar find_packages()
door uw handmatige find_packages()
of verwijdert u use_scm_version=True
om alleen de use_scm_version=True
.
Installatie-opties toevoegen
Zoals te zien in eerdere voorbeelden is het basisgebruik van dit script:
python setup.py install
Maar er zijn nog meer opties, zoals het installeren van het pakket en de mogelijkheid om de code te wijzigen en te testen zonder deze opnieuw te hoeven installeren. Dit wordt gedaan met behulp van:
python setup.py develop
Als u specifieke acties wilt uitvoeren, zoals het opstellen van een Sphinx- documentatie of het bouwen van fortran- code, kunt u uw eigen optie als volgt maken:
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
en finalize_options
worden uitgevoerd voor en na de run
functie zoals hun namen suggereren.
Daarna kunt u uw optie bellen:
python setup.py build_sphinx