Python Language
setup.py
Szukaj…
Parametry
Parametr | Stosowanie |
---|---|
name | Nazwa twojej dystrybucji. |
version | Ciąg wersji Twojej dystrybucji. |
packages | Lista pakietów Pythona (czyli katalogów zawierających moduły) do uwzględnienia. Można to określić ręcznie, ale zwykle używane jest wywołanie setuptools.find_packages() . |
py_modules | Lista modułów najwyższego poziomu w Pythonie (to znaczy pojedynczych plików .py ) do włączenia. |
Uwagi
Aby uzyskać więcej informacji na temat pakowania Pythona, zobacz:
Do pisania oficjalnych paczek znajduje się instrukcja obsługi opakowania .
Cel setup.py
Skrypt instalacyjny stanowi centrum wszystkich działań związanych z budowaniem, dystrybucją i instalacją modułów za pomocą Distutils. Jego celem jest poprawna instalacja oprogramowania.
Jeśli wszystko, co chcesz zrobić, to rozpowszechnić moduł o nazwie foo zawarty w pliku foo.py, wówczas skrypt instalacyjny może być tak prosty:
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules=['foo'],
)
Aby utworzyć dystrybucję źródłową dla tego modułu, należy utworzyć skrypt instalacyjny setup.py zawierający powyższy kod i uruchomić tę komendę z terminala:
python setup.py sdist
sdist utworzy plik archiwum (np. tarball w systemie Unix, plik ZIP w systemie Windows) zawierający skrypt instalacyjny setup.py i moduł foo.py. Plik archiwum zostanie nazwany foo-1.0.tar.gz (lub .zip) i rozpakuje się do katalogu foo-1.0.
Jeśli użytkownik końcowy chce zainstalować moduł foo, wystarczy pobrać foo-1.0.tar.gz (lub .zip), rozpakować go i - z katalogu foo-1.0 - uruchomić
python setup.py install
Dodawanie skryptów wiersza poleceń do pakietu python
Skrypty wiersza poleceń w pakietach Python są powszechne. Możesz zorganizować swój pakiet w taki sposób, że gdy użytkownik zainstaluje pakiet, skrypt będzie dostępny na jego ścieżce.
Jeśli masz pakiet greetings
ze skryptem wiersza poleceń hello_world.py
.
greetings/
greetings/
__init__.py
hello_world.py
Możesz uruchomić ten skrypt, uruchamiając:
python greetings/greetings/hello_world.py
Jeśli jednak chcesz go tak uruchomić:
hello_world.py
Możesz to osiągnąć, dodając scripts
do setup.py
setup()
w setup.py
w następujący sposób:
from setuptools import setup
setup(
name='greetings',
scripts=['hello_world.py']
)
Kiedy teraz zainstalujesz pakiet pozdrowienia, hello_world.py
zostanie dodany do twojej ścieżki.
Inną możliwością byłoby dodanie punktu wejścia:
entry_points={'console_scripts': ['greetings=greetings.hello_world:main']}
W ten sposób wystarczy uruchomić go w następujący sposób:
greetings
Korzystanie z metadanych kontroli źródła w pliku setup.py
setuptools_scm
to oficjalnie błogosławiony pakiet, który może używać metadanych Git lub Mercurial do określania numeru wersji pakietu oraz znajdowania pakietów Pythona i danych pakietów, które można w nim uwzględnić.
from setuptools import setup, find_packages
setup(
setup_requires=['setuptools_scm'],
use_scm_version=True,
packages=find_packages(),
include_package_data=True,
)
W tym przykładzie wykorzystano obie funkcje; aby używać tylko metadanych SCM dla wersji, zamień wywołanie find_packages()
na ręczną listę pakietów lub użyj tylko wyszukiwarki pakietów, usuń use_scm_version=True
.
Dodawanie opcji instalacji
Jak widać w poprzednich przykładach, podstawowe użycie tego skryptu to:
python setup.py install
Ale jest jeszcze więcej opcji, takich jak instalacja pakietu i możliwość zmiany kodu i przetestowania go bez konieczności ponownej instalacji. Odbywa się to za pomocą:
python setup.py develop
Jeśli chcesz wykonywać określone działania, takie jak kompilowanie dokumentacji Sfinksa lub budowanie kodu fortran , możesz utworzyć własną opcję, taką jak ta:
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,
)
opcje initialize_options
i finalize_options
zostaną wykonane przed i po funkcji run
jak sugerują to ich nazwy.
Następnie będziesz mógł wywołać swoją opcję:
python setup.py build_sphinx