Różnica między „python setup.py install” a „pip install”

109

Mam pakiet zewnętrzny, który chcę zainstalować w moim pythonie virtualenv z pliku tar. Jaki jest najlepszy sposób instalacji pakietu?

Odkryłem 2 sposoby na to:

  1. Rozpakuj plik tar, a następnie uruchom go python setup.py installw wyodrębnionym katalogu.
  2. pip install packagename.tar.gzz przykładu nr 7 w https://pip.pypa.io/en/stable/reference/pip_install/#examples

Czy jest jakaś różnica, wykonując te dwa sposoby.

user2125465
źródło
5
Użyj pip. Możesz za jego pomocą odinstalować pakiety.
Blender
„Ze źródła” jak w „Kasa VCS”, czy jak w sdist?
To, co jest „najlepsze”, zależy od Twoich wymagań! Czy wypróbowałeś któreś z tych rozwiązań i zawiodłeś je w jakiś sposób? A może pytasz, jaka jest różnica między tymi podejściami?
Martin Atkins
Na przykład w Fedorze używanie yum.
perreal

Odpowiedzi:

112

Na powierzchni, zarówno to samo: wykonując jedną python setup.py installlub pip install <PACKAGE-NAME>będzie zainstalować pakiet python dla ciebie, o wartości minimum zamieszania.

Jednak użycie pip oferuje dodatkowe zalety, które sprawiają, że jest o wiele przyjemniejszy w użyciu.

  • pip automatycznie pobierze wszystkie zależności pakietu za Ciebie. W przeciwieństwie do tego, jeśli używasz setup.py, często musisz ręcznie wyszukiwać i pobierać zależności, co jest żmudne i może stać się frustrujące.
  • pip śledzi różne metadane, które pozwalają łatwo odinstalować i zaktualizować pakiety za pomocą jednego polecenia: pip uninstall <PACKAGE-NAME>i pip install --upgrade <PACKAGE-NAME>. W przeciwieństwie do tego, jeśli instalujesz pakiet za pomocą setup.py, musisz ręcznie usunąć i utrzymywać pakiet ręcznie, jeśli chcesz się go pozbyć, co może być potencjalnie podatne na błędy.
  • Nie musisz już ręcznie pobierać plików. Jeśli używasz setup.py, musisz odwiedzić witrynę biblioteki, dowiedzieć się, skąd ją pobrać, wyodrębnić plik, uruchomić setup.py... W przeciwieństwie do tego pip automatycznie przeszuka indeks pakietów Pythona (PyPi), aby sprawdzić, czy pakiet tam istnieje, i automatycznie pobierze, rozpakuje i zainstaluje pakiet za Ciebie. Z kilkoma wyjątkami, prawie każda prawdziwie użyteczna biblioteka Pythona znajduje się na PyPi.
  • pip pozwoli ci łatwo zainstalować koła, co jest nowym standardem dystrybucji Pythona. Więcej informacji o kołach .
  • pip oferuje dodatkowe korzyści, które dobrze integrują się z użyciem virtualenv , czyli programem umożliwiającym uruchamianie wielu projektów wymagających sprzecznych bibliotek i wersji języka Python na komputerze. Więcej info .
  • pip jest domyślnie dołączany do Pythona od wersji Python 2.7.9 w serii Python 2.x, a od wersji Python 3.4.0 w serii Python 3.x, dzięki czemu jest jeszcze łatwiejszy w użyciu.

Więc w zasadzie użyj pip. Oferuje tylko ulepszenia w stosunku do używaniapython setup.py install .


Jeśli używasz starszej wersji Pythona, nie możesz zaktualizować i nie masz zainstalowanego pip, możesz znaleźć więcej informacji na temat instalowania pip pod następującymi linkami:

pip, sam w sobie, tak naprawdę nie wymaga samouczka. W 90% przypadków jedyne polecenie, którego naprawdę potrzebujesz, to pip install <PACKAGE-NAME>. To powiedziawszy, jeśli chcesz dowiedzieć się więcej o tym, co dokładnie możesz zrobić z pip, zobacz:

Często zaleca się również jednoczesne używanie pip i virtualenv. Jeśli jesteś początkującym w Pythonie, osobiście uważam, że dobrze byłoby zacząć od używania pip i instalować pakiety globalnie, ale ostatecznie myślę, że powinieneś przejść na używanie virtualenv, gdy zajmujesz się poważniejszymi projektami.

Jeśli chcesz dowiedzieć się więcej o jednoczesnym używaniu pip i virtualenv, zobacz:

Michael0x2a
źródło
1
Czy instalacja pip wywołuje wewnętrznie plik setup.py?
zmienna
@variable, pip install from "wheels", prekompilowane pakiety, nie, pip install from source: zobacz interfejs pip install build system
denis
Z mojego doświadczenia wynika python setup.py installrównież, że pobiera i instaluje zależności. Czy to zmiana od czasu, gdy napisałeś tę odpowiedź w 2013 roku?
Ken Williams
19

python setup.py installjest odpowiednikiem make install: jest to ograniczony sposób kompilowania i kopiowania plików do katalogów docelowych. Nie oznacza to, że jest to najlepszy sposób na rzeczywistą instalację oprogramowania w systemie.

pipjest menedżerem pakietów, który może instalować, aktualizować, wyświetlać i odinstalowywać pakiety, podobnie jak znane menedżery pakietów, w tym: dpkg, apt, yum, urpmi, portsitp. Pod maską będzie działać python setup.py install, ale z określonymi opcjami kontrolującymi, jak i gdzie ostatecznie zostaną zainstalowane.

Podsumowując: użyj pip.

Éric Araujo
źródło
2

Pytanie dotyczy preferowanej metody instalacji lokalnego archiwum zawierającego pakiet pythona, a NIE korzyści z przesłania pakietu do usługi indeksującej, takiej jak PyPi.

Z tego co wiem, niektórzy dystrybutorzy oprogramowania nie przesyłają swojego pakietu do PyPi, zamiast tego proszą programistów o pobranie pakietu ze swojej strony internetowej i zainstalowanie.

python setup.py install

To może działać, ale nie jest zalecane. Nie jest konieczne rozpakowywanie pliku tarball i wchodzenie do niego, aby uruchomić plik setup.py.

pip install ../path/to/packagename.tar.gz

To jest sposób zaprojektowany i preferowany. Zwięzłe i zgodne z pakietami w stylu PyPi.

Więcej informacji na temat pip installmożna znaleźć tutaj: https://pip.readthedocs.io/en/stable/reference/pip_install/

pole tematyczne
źródło
Czy możemy użyć pip install -e?
zmienna