Czy ktoś może wyjaśnić, co to setup.py
jest i jak można go skonfigurować lub używać?
python
python-3.x
setup.py
pypi
python-packaging
Oprogramowanie entuzjastyczne
źródło
źródło
Odpowiedzi:
setup.py
to plik Pythona, który zwykle informuje, że moduł / pakiet, który zamierzasz zainstalować, został spakowany i rozpowszechniony z Distutils, który jest standardem dystrybucji modułów Pythona.Umożliwia to łatwą instalację pakietów Python. Często wystarczy napisać:
pip
użyje setup.py, aby zainstalować moduł. Unikaj dzwonieniasetup.py
bezpośrednio.https://docs.python.org/3/installing/index.html#installing-index
źródło
setup.py
pliku.Pomaga zainstalować pakiet Pythona
foo
na twoim komputerze (może być również wvirtualenv
), abyś mógł zaimportować pakietfoo
z innych projektów, a także z [I] monitów Pythona.Czyni podobną pracę
pip
,easy_install
itd.,Za pomocą
setup.py
Zacznijmy od kilku definicji:
Pakiet - folder / katalog zawierający
__init__.py
plik.Moduł - prawidłowy plik python z
.py
rozszerzeniem.Dystrybucja - jak jeden pakiet odnosi się do innych pakietów i modułów .
Powiedzmy, że chcesz zainstalować pakiet o nazwie
foo
. To robiszZamiast tego, jeśli nie chcesz go instalować, ale nadal chcesz go używać. Więc zrób
To polecenie utworzy dowiązania symboliczne do katalogu źródłowego w pakietach witryn zamiast kopiowania. Z tego powodu jest dość szybki (szczególnie w przypadku dużych paczek).
Tworzenie
setup.py
Jeśli masz takie drzewo pakietów,
Następnie wykonaj następujące czynności w
setup.py
skrypcie, aby można go było zainstalować na niektórych komputerach:Zamiast tego, jeśli twoje drzewo pakietów jest bardziej złożone, jak to poniżej:
Wtedy twój
setup.py
w tym przypadku wyglądałby tak:Dodaj więcej rzeczy do (
setup.py
) i spraw, by było przyzwoite:long_description
Jest stosowany w pypi.org jako opis README z pakietu.I na koniec, możesz teraz przesłać swój pakiet na PyPi.org , aby inni mogli go zainstalować przy użyciu
pip install yourpackage
.Pierwszym krokiem jest zdobycie nazwy i przestrzeni pakietu w pypi przy użyciu:
Po zarejestrowaniu nazwy paczki nikt nie może jej zażądać ani z niej korzystać. Po udanej rejestracji musisz tam przesłać swój pakiet (do chmury),
Opcjonalnie możesz również podpisać paczkę za
GPG
pomocą,Bonus : Zobacz próbkę
setup.py
z prawdziwego projektu tutaj:torchvision-setup.py
źródło
requests
) ma ten projekt, aby wyraźnie dać dobry przykład setup.py - github.com/kennethreitz/setup.pysetup.py
jest odpowiedzią Pythona na wieloplatformowy instalator imake
plik.Jeśli znasz instalacje z wiersza poleceń, to znaczy
make && make install
topython setup.py build && python setup.py install
.Niektóre pakiety są czystym Pythonem i są kompilowane tylko bajtowo. Inne mogą zawierać natywny kod, który będzie wymagał natywnego kompilatora (jak
gcc
lubcl
) i modułu interfejsu Python (jakswig
lubpyrex
).źródło
python setup.py install
faktycznie działa jakopython setup.py build
pierwszy (więc nie musisz uruchamiać ich osobno, chyba że w szczególnych przypadkach). Uważam, żemake
zawsze należy uruchomić ręcznie przed uruchomieniemmake install
.make
nie wymaga żadnych konkretnych parametrów (ani zamawiania): od twórcy zależy,Makefile
które „cele” są dostępne (i w jakiej kolejności należy je wywoływać). Ponieważ gołeMakefile
s (zwykle) nie są bardzo przenośne, zwykle są generowane za pomocą poleceń takich jak./configure
(autotools) lubcmake .
(cmake) i to od nich zależy, czy te programy będą musiały jawnie uruchamiać sięmake
wcześniej,make install
czy nie.Jeśli pobrałeś pakiet, który ma „setup.py” w folderze głównym, możesz go zainstalować, uruchamiając
Jeśli opracowujesz projekt i zastanawiasz się, do czego ten plik jest przydatny, sprawdź dokumentację Pythona podczas pisania skryptu instalacyjnego
źródło
setup.py
to skrypt w języku Python, który jest zwykle dostarczany z bibliotekami lub programami, napisany w tym języku. Jego celem jest poprawna instalacja oprogramowania.Wiele pakietów korzysta z
distutils
frameworka w połączeniu zsetup.py
.http://docs.python.org/distutils/
źródło
Plik setup.py może być używany w dwóch scenariuszach. Najpierw chcesz zainstalować pakiet Python. Po drugie, chcesz stworzyć własny pakiet Python. Zwykle standardowy pakiet Pythona zawiera kilka ważnych plików, takich jak setup.py, setup.cfg i Manifest.in. Podczas tworzenia pakietu Python te trzy pliki określają (zawartość w PKG-INFO w folderze egg-info) nazwę, wersję, opis, inne wymagane instalacje (zwykle w pliku .txt) i kilka innych parametrów. plik setup.cfg jest odczytywany przez plik setup.py podczas tworzenia pakietu (może to być plik tar.gz). Manifest.in to miejsce, w którym możesz zdefiniować, co powinno być zawarte w twoim pakiecie. W każdym razie możesz robić wiele rzeczy za pomocą setup.py jak
Istnieje wiele innych poleceń, których można użyć w pliku setup.py. o pomoc
źródło
python setup.py --help-commands
. Bardzo przydatne podczas wczytywania pliku setup.py.Podczas pobierania pakietu z
setup.py
otwartym terminalem (Mac, Linux) lub wierszem poleceń (Windows). Używająccd
i przytrzymując przycisk Tab, ustaw ścieżkę do folderu, w którym pobrałeś plik i gdzie jestsetup.py
:Naciśnij Enter, powinieneś zobaczyć coś takiego:
Następnie wpisz po tym
python setup.py install
:Prasa
enter
. Gotowy!źródło
Aby zainstalować pobrany pakiet Python, rozpakuj archiwum i uruchom skrypt setup.py wewnątrz:
Dla mnie zawsze wydawało się to dziwne. Bardziej naturalne byłoby wskazanie menedżera pakietów na pobieranie, tak jak na przykład w Ruby i Nodejs.
gem install rails-4.1.1.gem
Menedżer pakietów jest również wygodniejszy, ponieważ jest znajomy i niezawodny. Z drugiej strony każdy
setup.py
jest nowatorski, ponieważ jest specyficzny dla pakietu. Wymaga wiary w konwencję „Ufam, że setup.py przyjmuje takie same polecenia, jak inne, których używałem w przeszłości”. To godne pożałowania podatek od siły woli.Nie twierdzę, że przepływ pracy setup.py jest mniej bezpieczny niż menedżer pakietów (rozumiem, że Pip po prostu uruchamia setup.py w środku), ale z pewnością czuję się dziwnie i denerwuje. Wszystkie komendy są zgodne z tą samą aplikacją do zarządzania pakietami. Możesz nawet polubić to.
źródło
setup.py
jest plikiem Python jak każdy inny. Może przyjmować dowolne nazwy, z wyjątkiem konwencji, że jestsetup.py
tak nazywany, aby nie było innej procedury dla każdego skryptu.Najczęściej
setup.py
służy do instalacji modułu Python, ale serwer służy również do innych celów:Moduły:
Być może jest to najbardziej znane użycie
setup.py
modułów. Chociaż można je zainstalować przy użyciupip
, stare wersje Pythona nie zawierałypip
domyślnie i musiały zostać zainstalowane osobno.Jeśli chcesz zainstalować moduł, ale nie chcesz go instalować
pip
, prawie jedyną alternatywą było zainstalowanie modułu zsetup.py
pliku. Można to osiągnąć poprzezpython setup.py install
. To byłoby zainstalować moduł Pythona do słownika głównego (bezpip
,easy_install
ect).Ta metoda jest często używana, gdy
pip
zawiedzie. Na przykład, jeśli poprawna wersja żądanego pakietu w Pythonie nie jest dostępna,pip
być może dlatego, że nie jest już utrzymywana, pobieranie źródła i uruchamianie działałobypython setup.py install
tak samo, z wyjątkiem sytuacji, gdy wymagane są skompilowane pliki binarne (ale zignoruje Wersja Python - chyba że zwracany jest błąd).Innym zastosowaniem
setup.py
jest instalacja pakietu ze źródła. Jeśli moduł jest wciąż w fazie rozwoju, pliki kół nie będą dostępne, a jedynym sposobem instalacji jest instalacja bezpośrednio ze źródła.Budowanie rozszerzeń języka Python:
Po zbudowaniu modułu można go przekonwertować na moduł gotowy do dystrybucji za pomocą skryptu instalacyjnego distutils . Po zbudowaniu można je zainstalować za pomocą powyższego polecenia.
Skrypt instalacyjny jest łatwy do zbudowania, a po prawidłowym skonfigurowaniu pliku można go skompilować, uruchamiając
python setup.py build
(patrz link do wszystkich poleceń).Po raz kolejny został nazwany
setup.py
dla łatwości użycia i zgodnie z konwencją, ale może przyjmować dowolną nazwę.Cython:
Innym znanym zastosowaniem
setup.py
plików są skompilowane rozszerzenia. Wymagają one skryptu instalacyjnego z wartościami zdefiniowanymi przez użytkownika. Umożliwiają szybkie (ale po skompilowaniu są zależne od platformy) wykonanie. Oto prosty przykład z dokumentacji :Można to skompilować za pomocą
python setup.py build
Cx_Freeze:
Kolejnym modułem wymagającym skryptu instalacyjnego jest
cx_Freeze
. Konwertuje to skrypt Pythona na pliki wykonywalne. Pozwala to na dołączenie wielu poleceń, takich jak opisy, nazwy, ikony, pakiety, wykluczenie ect, a po uruchomieniu spowoduje utworzenie aplikacji do dystrybucji. Przykład z dokumentacji :Można to skompilować za pomocą
python setup.py build
.Czym jest
setup.py
plik?Po prostu jest to skrypt, który buduje lub konfiguruje coś w środowisku Python.
Rozproszony pakiet powinien zawierać tylko jeden skrypt instalacyjny, ale nierzadko łączenie kilku razem w jeden skrypt instalacyjny. Zauważ, że często dotyczy to,
distutils
ale nie zawsze (jak pokazałem w ostatnim przykładzie). Należy pamiętać, że po prostu konfiguruje pakiet / skrypt Pythona.Pobiera nazwę, więc to samo polecenie może być zawsze użyte podczas budowania lub instalowania.
źródło
Aby to uprościć, plik setup.py jest uruchamiany tak, jak
"__main__"
podczas wywoływania funkcji instalacyjnych inne wymienione odpowiedzi. W pliku setup.py powinieneś umieścić wszystko, co potrzebne do zainstalowania pakietu.Typowe funkcje setup.py
Poniższe dwie sekcje omawiają dwie rzeczy, które ma wiele modułów setup.py.
setuptools.setup
Ta funkcja pozwala określić atrybuty projektu, takie jak nazwa projektu, wersja .... Co najważniejsze, funkcja ta umożliwia zainstalowanie innych funkcji, jeśli są one odpowiednio zapakowane. Zobacz tę stronę internetową, aby zobaczyć przykład setuptools.setup
Te atrybuty setuptools.setup umożliwiają instalację następujących typów pakietów:
Pakiety zaimportowane do projektu i wymienione w PyPI przy użyciu setuptools.findpackages :
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
Pakiety nie są w PyPI , ale można je pobrać z adresu URL za pomocą link_zależności
dependency_links=["http://peak.telecommunity.com/snapshots/",]
Funkcje niestandardowe
W idealnym świecie
setuptools.setup
poradziłby sobie ze wszystkim. Niestety nie zawsze tak jest. Czasami musisz wykonać określone czynności, takie jak instalowanie zależności za pomocą komendy subprocess , aby system, na którym instalujesz, był w odpowiednim stanie dla pakietu. Staraj się tego unikać, funkcje te stają się mylące i często różnią się między systemem operacyjnym, a nawet dystrybucją .źródło