Co to jest setup.py?

Czy ktoś może wyjaśnić, czym jest setup.py i jak można go skonfigurować lub używać?

Author: kmario23, 2009-09-24

10 answers

setup.py jest plikiem Pythona, który zwykle informuje, że moduł / pakiet, który zamierzasz zainstalować, został zapakowany i dystrybuowany za pomocą Distutils, który jest standardem dystrybucji modułów Pythona.

Pozwala to na łatwe instalowanie pakietów Pythona. Często wystarczy napisać:

$ python setup.py install

I moduł sam się zainstaluje.

Http://docs.python.org/install/index.html

 406
Author: Silfverstrom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-06 15:32:15

Pomaga zainstalować pakiet Pythona foo na komputerze (może być również w virtualenv), dzięki czemu można zaimportować pakiet foo z innych projektów, a także z monitów [i] Pythona.

wykonuje podobną pracę pip, easy_install itd.,


Za pomocą setup.py

Zacznijmy od kilku definicji:

Pakiet - folder / katalog zawierający plik __init__.py.
Module - poprawny plik Pythona z rozszerzeniem .py.
Dystrybucja - Jak jeden pakiet odnosi się do innych pakietów i modułów .

Powiedzmy, że chcesz zainstalować pakiet o nazwie foo. Więc robisz,

$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

Zamiast tego, jeśli nie chcesz go instalować, ale nadal chcesz go używać. Więc zrób,

$ python setup.py develop  

To polecenie utworzy dowiązania symboliczne do katalogu źródłowego w pakietach witryn zamiast kopiowania rzeczy. Z tego powodu jest to dość szybko (szczególnie w przypadku dużych paczek).


Tworzenie setup.py

Jeśli masz takie drzewo pakietów,

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

Następnie wykonaj następujące czynności w swoim setup.py skrypt tak, że można go zainstalować na jakiejś maszynie:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='[email protected]',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
)

Zamiast tego, jeśli twoje drzewo pakietów jest bardziej złożone, jak to poniżej:

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
├── scripts
│   ├── cool
│   └── skype
└── setup.py

Then, your setup.py w tym przypadku byłoby jak:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='[email protected]',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

Dodaj więcej rzeczy do (setup.py) & zrób to porządnie:

from setuptools import setup

with open("README", 'r') as f:
    long_description = f.read()

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   license="MIT",
   long_description=long_description,
   author='Man Foo',
   author_email='[email protected]',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

long_description jest używany w pypi.org jako opis README Twojej paczki.


I wreszcie, jesteś teraz gotowy, aby przesłać swój pakiet do PyPi.org aby inni mogli zainstalować Twój Pakiet używając pip install yourpackage.

Pierwszym krokiem jest odebranie nazwy pakietu i spacji w pypi za pomocą:

$ python setup.py register

Po zarejestrowaniu nazwy pakietu nikt nie może go odebrać ani używać. Po udanej rejestracji masz aby przesłać tam (do chmury) pakiet,

$ python setup.py upload

Opcjonalnie możesz również podpisać swoją paczkę za pomocą GPG przez,

$ python setup.py --sign upload

Bonus : Zobacz próbkę setup.py z prawdziwego projektu tutaj: torchvision-setup.py

 183
Author: kmario23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 16:04:19

setup.py jest odpowiedzią Pythona na wieloplatformowy instalator i plik make.

Jeśli znasz instalacje wiersza poleceń, to make && make install tłumaczy się na python setup.py build && python setup.py install.

Niektóre pakiety są czystym Pythonem i są kompilowane tylko bajtowo. Inne mogą zawierać kod natywny, który będzie wymagał kompilatora natywnego (jak gcc lub cl) i Modułu Interfejsu Pythona (jak swig lub pyrex).

 73
Author: whatnick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-20 15:22:01

Jeśli pobrałeś pakiet, który ma "setup.py" w folderze głównym możesz go zainstalować, uruchamiając

python setup.py install

Jeśli tworzysz projekt i zastanawiasz się do czego ten plik jest przydatny, sprawdź dokumentację Pythona przy pisaniu skryptu instalacyjnego

 43
Author: Pēteris Caune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 14:21:46

setup.py jest skryptem Pythona, który jest zwykle dostarczany z bibliotekami lub programami, napisanymi w tym języku. Jego celem jest prawidłowa instalacja oprogramowania.

Wiele pakietów używa frameworka distutils w połączeniu z setup.py.

Http://docs.python.org/distutils/

 15
Author: Ferdinand Beyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 14:21:58

Setup.py może być używany w dwóch scenariuszach , po pierwsze, chcesz zainstalować pakiet Pythona. Po drugie, chcesz utworzyć własny pakiet Pythona. Zazwyczaj standardowy pakiet Pythona zawiera kilka ważnych plików, takich jak setup.py, setup.cfg i Manifest.in. podczas tworzenia pakietu Pythona, te trzy pliki określą (zawartość w PKG-INFO w folderze egg-info) nazwę, wersję, opis, inne wymagane instalacje (zwykle w .plik txt) oraz kilka innych parametrów. / align = "left" / cfg czyta się przez setup.py podczas tworzenia pakietu (może być tar.gz). Manifest.in to miejsce, w którym możesz określić, co powinno być zawarte w Twoim pakiecie. W każdym razie można zrobić kilka rzeczy za pomocą setup.py jak

python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo]  (to upload package to pypi or local repo)

Istnieje kilka innych poleceń, które mogą być używane z setup.py . o pomoc

python setup.py --help-commands
 14
Author: Avichal Badaya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 07:42:55

Po pobraniu pakietu z setup.py Otwórz Terminal (Mac,Linux) lub wiersz polecenia (Windows). Za pomocą cd i przycisku Tab Ustaw ścieżkę do folderu, w którym pobrano plik i gdzie znajduje się setup.py:

iMac:~ user $ cd path/pakagefolderwithsetupfile/

Naciśnij enter, powinieneś zobaczyć coś takiego:

iMac:pakagefolderwithsetupfile user$

Następnie wpisz po tym python setup.py install:

iMac:pakagefolderwithsetupfile user$ python setup.py install

Naciśnij enter. Zrobione!

 6
Author: G M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-18 10:49:14

Aby zainstalować pobrany pakiet Pythona, rozpakuj archiwum i uruchom setup.py skrypt wewnątrz:

python setup.py install
Dla mnie to zawsze było dziwne. Bardziej naturalnym byłoby skierowanie menedżera pakietów na pobrany plik, tak jak w Ruby i Nodejs, np. gem install rails-4.1.1.gem

Menedżer pakietów jest również wygodniejszy, ponieważ jest znany i niezawodny. Z drugiej strony, każda setup.py jest nowa, ponieważ jest specyficzna dla pakietu. Wymaga wiary w konwencję " ufam temu setup.py wykonuje te same polecenia, co inne, których używałem w przeszłości". To godny pożałowania podatek od siły woli.

Nie mówię, że setup.py workflow jest mniej bezpieczny niż menedżer pakietów (rozumiem, że Pip po prostu uruchamia setup.py wewnątrz), ale na pewno czuję, że jest to niezręczne i drażniące. Istnieje harmonia poleceń wszystkich będących w tej samej aplikacji menedżera pakietów. Może nawet go polubisz.

 6
Author: Colonel Panic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-03 23:34:21

Aby to uprościć, setup.py jest uruchamiany jako "__main__" po wywołaniu funkcji install pozostałe wymienione odpowiedzi. Wewnątrz setup.py, należy umieścić wszystko, co potrzebne do zainstalowania pakietu.

Często setup.py funkcje

Następujące dwie sekcje omawiają dwie rzeczy, wiele setup.py moduły mają.

Setuptools.setup

Ta funkcja pozwala określić atrybuty projektu , takie jak nazwa projektu, wersja.... Najważniejsze, ta funkcja pozwala zainstalować inne funkcje, jeśli są prawidłowo zapakowane. Zobacz ta strona dla przykładu setuptools.konfiguracja

Te atrybuty setuptools.setup enable instalowanie tego typu pakietów:

Funkcje niestandardowe

W idealnym świecie, załatwiłby wszystko za Ciebie. Niestety nie zawsze tak jest. Czasami trzeba wykonać określone czynności, np. zainstalować zależności z podprocesem polecenie, aby system, na którym instalujesz, był w odpowiednim stanie dla Twojego pakietu. Spróbuj tego uniknąć, funkcje te stają się mylące i często różnią się między OS a nawet dystrybucją.
 0
Author: user4757074,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-15 16:06:29

setup.py jest plikiem Pythona jak każdy inny. Może przyjąć dowolną nazwę, z wyjątkiem konwencji, że nazywa się setup.py tak, że nie ma innej procedury z każdym skryptem.

Najczęściej setup.py jest używany do instalacji modułu Pythona, ale serwer do innych celów:

Moduły:

Być może jest to najbardziej znane użycie setup.py jest w modułach. Chociaż można je zainstalować za pomocą pip, stare wersje Pythona domyślnie nie zawierały pip i musiały być zainstalowany oddzielnie.

Jeśli chcesz zainstalować moduł, ale nie chcesz instalować pip, jedyną alternatywą było zainstalowanie modułu z pliku setup.py. Można to osiągnąć za pomocą python setup.py install. To zainstalowałoby moduł Pythona do głównego słownika (bez pip, easy_install ect).

Ta metoda jest często używana, gdy pip nie powiedzie się. Na przykład, jeśli poprawna wersja Pythona żądanego pakietu nie jest dostępna przez pip, być może dlatego, że nie jest już utrzymywane,, pobranie źródła i uruchomienie python setup.py install wykonałoby to samo, z wyjątkiem skompilowanych binariów, które są wymagane, (ale pominie wersję Pythona-chyba że zostanie zwrócony błąd).

Innym zastosowaniem setup.py jest instalacja pakietu ze źródła. Jeśli moduł jest nadal w fazie rozwoju, pliki wheel nie będą dostępne, a jedynym sposobem instalacji jest instalacja bezpośrednio ze źródła.

Python Budowlany rozszerzenia:

Po zbudowaniu modułu można go przekonwertować do modułu gotowego do dystrybucji za pomocą skryptu instalacyjnego distutils . Po zbudowaniu można je zainstalować za pomocą powyższego polecenia.

Skrypt instalacyjny jest łatwy do zbudowania i po prawidłowym skonfigurowaniu pliku można go skompilować uruchamiając python setup.py build (zobacz link dla wszystkich poleceń).

Po raz kolejny nazywa się setup.py dla łatwości użycia i konwencji, ale może przyjmować dowolne nazwisko.

Cython:

Inne słynne użycie plików setup.py zawiera skompilowane rozszerzenia. Wymagają one skryptu instalacyjnego z wartościami zdefiniowanymi przez użytkownika. Pozwalają one na szybkie (ale po skompilowaniu są zależne od platformy) wykonanie. Oto prosty przykład z dokumentacji :

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world app',
    ext_modules = cythonize("hello.pyx"),
)

Można to skompilować za pomocą python setup.py build

Cx_Freeze:

Kolejnym modułem wymagającym skryptu instalacyjnego jest cx_Freeze. Konwertuje skrypt Pythona na wykonywalne. Pozwala to na wiele poleceń, takich jak opisy, nazwy, ikony, pakiety do włączenia, wykluczenia ect i po uruchomieniu wytworzy dystrybuowalną aplikację. Przykład z dokumentacji :

import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} 

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "guifoo",
        version = "0.1",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("guifoo.py", base=base)])

Można to skompilować za pomocą python setup.py build.

Co to jest plik setup.py?

Po prostu jest to skrypt, który buduje lub konfiguruje coś w środowisku Pythona.

Pakiet dystrybuowany powinien zawierać tylko jeden skrypt instalacyjny ale nie jest rzadkością łączenie kilku razem w jeden skrypt instalacyjny. Zauważ, że często dotyczy to distutils, ale nie zawsze (jak pokazałem w moim ostatnim przykładzie). Należy pamiętać, że po prostu konfiguruje Pakiet/skrypt Pythona w jakiś sposób.

Przyjmuje nazwę, więc zawsze można użyć tego samego polecenia podczas budowania lub instalowania.

 0
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-14 00:31:10