Czy Python ma system zarządzania pakietami / modułami?

145

Czy Python ma system zarządzania pakietami / modułami, podobny do tego, jak Ruby ma rubygemy, gdzie możesz to zrobić gem install packagename?

Podczas instalowania modułów Pythona widzę tylko odniesienia do python setup.py install, ale to wymaga, abyś najpierw znalazł pakiet.

tommy chheng
źródło
3
Jeśli uważasz, że PyPI w indeksie pakietów Pythona powinien zawierać jaśniejsze instrukcje dotyczące instalowania pakietów, zagłosuj i skomentuj ten problem na bitbucket.org/pypa/pypi/issue/149/ ...
Colonel Panic
Chociaż było to aktualne w tamtym czasie, odsyłacz w tym pytaniu prowadzi teraz do starszej dokumentacji distutils. I złożył bugs.python.org/issue26014 pokryć te docs muszą być jasne, że już nie nadaje się do stosowania jako dokumentacji użytkownika końcowego są (są przechowywane wyłącznie wokół na rzecz implementors Tool).
ncoghlan

Odpowiedzi:

213

Niedawny postęp

Marzec 2014 : Dobra wiadomość! Python 3.4 jest dostarczany z Pip. Pip od dawna jest de facto standardowym menedżerem pakietów Pythona. Możesz zainstalować taki pakiet :

pip install httpie

Wahey! To najlepsza cecha każdego wydania Pythona. Dzięki temu bogactwo bibliotek społeczności jest dostępne dla wszystkich. Nowicjusze nie są już wykluczani z korzystania z bibliotek społeczności z powodu zaporowej trudności konfiguracji.

Jednak nadal istnieje wiele wyjątkowych frustracji związanych z pakowaniem w Pythonie. W sumie sprawiają, że Python jest bardzo niezbyt zachęcający dla początkujących. Również długa historia zaniedbań (tj. Brak dostawy z menedżerem pakietów przez 14 lat z Pythona 2.0 do Pythona 3.3) wyrządziła szkody społeczności. Poniżej opiszę oba.

Niezwykłe frustracje

Ważne jest, aby zrozumieć, że chociaż doświadczeni użytkownicy są w stanie obejść te frustracje, stanowią one znaczące bariery dla osób, które nie znają Pythona. W rzeczywistości trudność i ogólna nieprzyjazna dla użytkownika może zniechęcić wielu z nich.

Witryna PyPI jest pomocna w zwalczaniu

Każdy język z menedżerem pakietów ma oficjalne (lub quasi-oficjalne) repozytorium, w którym społeczność może pobierać i publikować pakiety. Python ma indeks pakietów Pythona, PyPI. https://pypi.python.org/pypi

Porównajmy jego strony ze stronami RubyGems i Npm (menedżera pakietów Node).

  1. https://rubygems.org/gems/rails Strona RubyGems dotycząca pakieturails
  2. https://www.npmjs.org/package/express Npm Strona pakietuexpress
  3. https://pypi.python.org/pypi/simplejson/ Strona PyPI dotycząca pakietusimplejson

Zobaczysz, że strony RubyGems i Npm zaczynają się od jednowierszowego opisu pakietu, a następnie dużych, przyjaznych instrukcji, jak go zainstalować.

Tymczasem biada każdemu nieszczęsnemu użytkownikowi Pythona, który naiwnie przegląda PyPI. Na https://pypi.python.org/pypi/simplejson/ nie znajdą takich pomocnych instrukcji. Istnieje jednak duży zielony link „Pobierz”. Przestrzeganie go nie jest nierozsądne. Aha, klikają! Ich przeglądarka pobiera .tar.gzplik. Wielu użytkowników systemu Windows nie może go nawet otworzyć, ale jeśli wytrwają, mogą w końcu go wyodrębnić, a następnie uruchomić setup.pyi ostatecznie z pomocą Google setup.py install. Niektórzy poddadzą się i wymyślą koło na nowo.

Oczywiście wszystko to jest złe. Najprostszym sposobem zainstalowania pakietu jest poleceniem PIP. Ale PyPI nawet nie wspomniał o Pipie. Zamiast tego poprowadził ich archaiczną i nudną ścieżką.

Błąd: nie można znaleźć pliku vcvarsall.bat

Numpy to jedna z najpopularniejszych bibliotek Pythona. Spróbuj zainstalować go za pomocą Pipa, otrzymasz ten tajemniczy komunikat o błędzie:

Błąd: nie można znaleźć pliku vcvarsall.bat

Próba rozwiązania tego jednego z najpopularniejszych pytań dotyczących przepełnienia stosu: „ błąd: nie można znaleźć pliku vcvarsall.bat

Niewielu ludziom się to udaje.

Dla porównania, w tej samej sytuacji Ruby wyświetla ten komunikat, który wyjaśnia, co się dzieje i jak to naprawić:

Zaktualizuj swoją ścieżkę PATH, aby zawierała narzędzia do kompilacji lub pobierz DevKit ze strony http://rubyinstaller.org/downloads i postępuj zgodnie z instrukcjami na http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Publikowanie pakietów jest trudne

Ruby i Nodejs są dostarczane z w pełni funkcjonalnymi menedżerami pakietów, Gem (od 2007 r.) I Npm (od 2011 r.), I pielęgnują wspólnoty udostępniania skupione wokół GitHub. Npm sprawia, że publikowanie pakietów jest tak proste, jak ich instalowanie, ma już 64 tys . Pakietów . RubyGems wyświetla 72 tys . Pakietów . Czcigodny indeks pakietów Pythona zawiera tylko 41k .

Historia

Latając w obliczu motta „ baterie w zestawie ”, Python był dostarczany bez menedżera pakietów do 2014 roku.

Aż do Pipa de facto standardem był rozkaz easy_install. To było żałośnie niewystarczające. Nie było polecenia do odinstalowania pakietów.

Pip był ogromną poprawą. Miał większość funkcji Ruby's Gem. Niestety Pip był - do niedawna - ironicznie trudny do zainstalowania. W rzeczywistości problem pozostaje głównym pytaniem Pythona w Stack Overflow: „ Jak zainstalować pip w systemie Windows?

Colonel Panic
źródło
3
Dla wszystkich zainteresowanych, PEP 439 proponuje sposób usprawnienia procesu instalacji pip, chociaż myślę, że ten PEP jest tylko częścią szerszej strategii, której się przygląda. Zobacz także dyskusję tutaj .
Cartroo,
3
@Cartroo to wspaniała wiadomość! Python zasługuje na menedżera pakietów, mam nadzieję, że programiści mogą to zrobić.
Colonel Panic,
Absolutnie, od dawna. Mam nadzieję, że przynajmniej trafi do Pythona 3.4. Niestety, bardzo wątpię, czy w końcu zostanie przeniesiony do wersji 2.x, ale na końcu tunelu jest przynajmniej światło. Miejmy tylko nadzieję, że to nie nadchodzący smok ... (^_^)
Cartroo,
6
W obronie Pythona nowsze języki, takie jak Ruby i Node, miały szczęście być w stanie obserwować błędy poprzednich języków i ich unikać. To powiedziawszy, naprawdę chciałbym, aby zarządzanie pakietami w Pythonie spotkało się z większą miłością i troską, więc cieszę się, że PEP 439 wskazał @Cartroo.
Dennis,
Zgadzam się, że zarządzanie pakietami w Ruby jest wspaniałą rzeczą z mojej perspektywy (użytkownika końcowego) ... gem install Xpo prostu wydaje się działać na wszystkich platformach. Jak więc poradzili sobie z tym w przypadku klejnotów, które wymagają kompilacji kodu C w systemie Windows?
bsa
64

Indeks pakietów Pythona (PyPI) wydaje się być standardowy:

  • Aby zainstalować pakiet: pip install MyProject
  • Aby zaktualizować pakiet pip install --upgrade MyProject
  • Aby naprawić wersję pakietupip install MyProject==1.0

Możesz zainstalować menedżera pakietów w następujący sposób:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Bibliografia:

Thomas Bratt
źródło
3
To jest nowoczesna odpowiedź.
Gringo Suave
6
Szukałem w Internecie przez 20 minut i nigdzie nie było takiej odpowiedzi. Dziękuję bardzo. Mam też poważne wątpliwości co do używania Pythona, jeśli dokumentacja jest tak zła ... to powinno być na głównej stronie Pythona lub dostępne z google czy coś
Chris J
63

Dla kontrastu jest też pip .

Ignacio Vazquez-Abrams
źródło
2
dzięki! dlaczego o pip nie wspomniano na stronie dokumentacji instalacji modułów Pythona?
tommy chheng
Zauważ, że pip nie obsługuje jaj, instaluje tylko pakiety źródłowe. Ogólnie rzecz biorąc, pip robi wiele rzeczy znacznie lepiej niż easy_install, ale easy_install prawdopodobnie zostanie zainstalowany domyślnie na większości uniksów, a pip nie.
Jeffrey Harris,
8
@Tommy Right! Jeśli deweloperom Pythona zależało na doświadczeniu użytkownika, wysyłaliby Pythona z menedżerem pakietów (takim jak pip). Ruby jest dostarczany z Gem, a Nodejs z Npm. stackoverflow.com/a/13445719/284795
Colonel Panic
21

Jako programista Ruby i Perl oraz osoba ucząca się Pythona, nie znalazłem easy_install ani pip jako odpowiednika RubyGems lub CPAN.

Staram się, aby moje systemy programistyczne działały z najnowszymi wersjami modułów, gdy programiści je aktualizują, i zamrażam moje systemy produkcyjne na ustalonych wersjach. Zarówno RubyGems, jak i CPAN ułatwiają znajdowanie modułów, wymieniając dostępne elementy, a następnie instalując je i później aktualizując pojedynczo lub zbiorczo, jeśli zachodzi taka potrzeba.

easy_install i pip ułatwiają instalację modułu RAZ ZNALAZŁEM go przez wyszukiwanie w przeglądarce lub dowiedziałem się o nim w inny sposób, ale nie powiedzą mi, co jest dostępne. Mogę wyraźnie nazwać moduł, który ma zostać zaktualizowany, ale aplikacje nie powiedzą mi, co zostało zaktualizowane, ani nie zaktualizują wszystkiego zbiorczo, jeśli chcę.

Tak więc podstawowa funkcjonalność jest dostępna w pip i easy_install, ale brakuje niektórych funkcji, które chciałbym zobaczyć, które uczyniłyby je bardziej przyjaznymi i łatwiejszymi w użyciu oraz na równi z CPAN i RubyGems.

Blaszany Człowiek
źródło
Ta odpowiedź jest teraz dobrze i naprawdę nieaktualna.
ncoghlan
11

Co najmniej od końca 2014 r. Należy rozważyć dystrybucję Anaconda Python firmy Continuum Analytics z menedżerem pakietów Conda . Rozwiązuje większość poważnych problemów, z którymi ludzie spotykają się w Pythonie w ogóle (zarządzanie różnymi wersjami Pythona, aktualizowanie wersji Pythona, zarządzanie pakietami, środowiska wirtualne, zgodność z Windows / Mac) w jednym spójnym pobraniu.

Pozwala zrobić wszystko, co chcesz w Pythonie, bez konieczności zmiany systemu. Moim kolejnym preferowanym rozwiązaniem jest pip + virtualenv, ale musisz albo zainstalować virtualenv w swoim systemie Python (a twój systemowy Python może nie być wersją, którą chcesz) lub skompilować ze źródła . Anaconda sprawia, że ​​cały proces jest jednym kliknięciem przycisku, a także dodaje kilka innych funkcji.

anderspitman
źródło
7

To byłby easy_install .

Kirk Strauser
źródło
1
Jeśli chcesz zagłosować przeciw wszystkim na stronie, którzy to powiedzieli easy_install, najpierw sprawdź daty. To była ważna rada, gdy została udzielona prawie 7 lat temu . Nie wydaje mi się, żebyśmy odpowiadali na regularne odwiedziny w celu aktualizacji, więc obniżanie głosów jest głupie.
Kirk Strauser,
6

Nazywa się to setuptools. Uruchamia się go za pomocą polecenia „easy_install”.

Katalog można znaleźć pod adresem http://pypi.python.org/

Chris Long
źródło
5

Nie widzę ani MacPorts, ani Homebrew wymienionych w innych odpowiedziach tutaj, ale ponieważ widzę je wspomniane gdzie indziej w Stack Overflow w przypadku powiązanych pytań, dodam własne 0,02 USD, które wielu ludzi wydaje się uważać za MacPorts nie tylko za pakiet menedżer pakietów w ogóle (na dzień dzisiejszy podają 16311 pakietów / portów, 2931 pasujących do "python", choć tylko dla komputerów Mac), ale także jako przyzwoity (może lepszy) menedżer pakietów dla pakietów / modułów Pythona:

Pytanie

„… jaką metodę używają programiści Mac Python do zarządzania swoimi modułami?”

Odpowiedzi

SciPy

„Komputery Mac (w przeciwieństwie do Linuksa) nie są dostarczane z menedżerem pakietów, ale istnieje kilka popularnych menedżerów pakietów, które można zainstalować. Macports ...”

Nadal zastanawiam się, czy samemu używać MacPorts, ale w tej chwili skłaniam się w tym kierunku.

Osteoboon
źródło
1
Sam Homebrew mówi: Możesz instalować pakiety Pythona za pomocą (przestarzałego easy_install lub) pip install <your_favorite_package>
Simone
4

W systemie Windows zainstaluj wtedy http://chocolatey.org/

choco install python

Otwórz nowe okno cmd ze zaktualizowaną ścieżką PATH. Dalej, zrób

choco install pip

Potem możesz

pip install pyside
pip install ipython
...
hansvb
źródło
Chciałem odpowiedzieć na to jako komentarz do odpowiedzi Thomasa Bratta, ale nie mam wystarczającej reputacji ...
hansvb
3

Ponieważ nikt nie wspomniał tutaj o pipenv , chciałbym opisać moje poglądy, dlaczego wszyscy powinni go używać do zarządzania pakietami Pythona.

Jak wspomniał @ColonelPanic, istnieje kilka problemów z indeksem pakietów Python, a także z pip i virtualenv .

Pipenv rozwiązuje większość problemów z pip i zapewnia również dodatkowe funkcje.

Funkcje Pipenv

Pipenv ma zastąpić pip i virtualenv, co oznacza, że ​​pipenv automatycznie utworzy oddzielne środowisko wirtualne dla każdego projektu, unikając w ten sposób konfliktów między różnymi wersjami Pythona / wersjami pakietów dla różnych projektów.

  • Umożliwia prawdziwie deterministyczne kompilacje, jednocześnie łatwo określając tylko to, czego chcesz.
  • Generuje i sprawdza skróty plików pod kątem zablokowanych zależności.
  • Automatycznie zainstaluj wymagane Pythony, jeśli pyenv jest dostępny.
  • Automatycznie odnajduje rekurencyjnie dom twojego projektu, wyszukując plik Pipfile.
  • Automatycznie generuje plik Pipfile, jeśli taki nie istnieje.
  • Automatycznie tworzy virtualenv w standardowej lokalizacji.
  • Automatycznie dodaje / usuwa pakiety do pliku Pipfile, gdy są odinstalowywane / instalowane.
  • Automatycznie ładuje pliki .env, jeśli istnieją.

Jeśli pracowałeś wcześniej nad projektami w Pythonie, zdasz sobie sprawę, że te funkcje znacznie ułatwiają zarządzanie pakietami.

Inne polecenia

  • checksprawdza luki w zabezpieczeniach i stwierdza, że ​​obecne środowisko spełnia wymagania PEP 508. ( co moim zdaniem jest świetną funkcją, szczególnie po tym - złośliwe pakiety na PyPi )
  • graph pokaże wykres zależności zainstalowanych zależności.

Więcej na ten temat przeczytasz tutaj - Pipenv .

Instalacja

Dokumentację instalacyjną znajdziesz tutaj

PS: Jeśli lubisz pracować z żądaniami pakietów Python , z przyjemnością dowiesz się, że pipenv jest autorstwa tego samego programisty Kennetha Reitza

Vaulstein
źródło
0

Poezja jest tym, czego szukasz. Dba o zarządzanie zależnościami, środowiska wirtualne, bieganie.

0x32e0edfb
źródło