Instaluję wiele takich samych pakietów w różnych środowiskach virtualenv . Czy istnieje sposób, żebym mógł raz pobrać pakiet, a następnie zainstalować pip z lokalnej pamięci podręcznej?
Zmniejszyłoby to przepustowość i czas pobierania.
virtualenv
pip
Matthew Rankin
źródło
źródło
Odpowiedzi:
Zaktualizowana odpowiedź 19 listopada 15
Zgodnie z dokumentacją Pip :
Dlatego zaktualizowaną odpowiedzią jest użycie pip z domyślnymi ustawieniami, jeśli chcesz mieć pamięć podręczną pobierania.
Oryginalna odpowiedź
Z wiadomości pip , wersja 0.1.4:
Aby to wykorzystać, dodałem do mojego
~/.bash_profile
:lub, jeśli korzystasz z komputera Mac:
Uwagi
PIP_DOWNLOAD_CACHE
katalogu. Na przykład mam teraz sporo pakietów Django.virtualenvs
w samolocie, ale nadal jest świetne.źródło
Moim zdaniem
pip2pi
jest dużo bardziej eleganckim i niezawodnym rozwiązaniem tego problemu.Z dokumentów:
pip2pi
umożliwia stworzenie własnego indeksu PyPI za pomocą dwóch prostych poleceń:Aby odzwierciedlić pakiet i wszystkie jego wymagania, użyj
pip2tgz
:Aby zbudować indeks pakietu z poprzedniego katalogu:
Aby zainstalować z indeksu utworzonego w kroku 2, możesz po prostu użyć:
Możesz nawet utworzyć kopię lustrzaną swojego własnego indeksu na zdalnym hoście za pomocą
pip2pi
.źródło
pip2tgz
wykrywa, czy już pobrałeś pakiet do wyznaczonego katalogu, więc jeśli uruchomisz tę samą linię instalacyjną lub kilka linii instalacyjnych, które mają nakładające się zależności, pobierze każdy pakiet tylko raz.W przypadku nowszych wersji Pip:
Nowsze wersje Pipa teraz domyślnie buforują pobieranie. Zobacz tę dokumentację:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
W przypadku starszych wersji Pip:
Utwórz plik konfiguracyjny o nazwie
~/.pip/pip.conf
i dodaj następującą zawartość:W systemie OS X lepszą ścieżką do wyboru byłoby to, że jest
~/Library/Caches/pip
ona zgodna z konwencją używaną przez inne programy OS X.źródło
pip.conf
zdownload_cache
ustawieniem, że punkty do tego samego katalogu całego systemu.PIP_DOWNLOAD_CACHE ma poważne problemy. Co najważniejsze, koduje nazwę hosta pobierania do pamięci podręcznej, więc korzystanie z serwerów lustrzanych staje się niemożliwe.
Lepszym sposobem zarządzania pamięcią podręczną pobranych plików pip jest oddzielenie kroku „pobierz pakiet” od kroku „zainstaluj pakiet”. Pobrane pliki są powszechnie nazywane „plikami sdist” (dystrybucje źródłowe) i mam zamiar przechowywać je w katalogu $ SDIST_CACHE.
Kończy się to dwoma krokami:
Co spowoduje pobranie pakietu i umieszczenie go w katalogu wskazywanym przez $ SDIST_CACHE. Nie zainstaluje pakietu. A potem biegniesz:
Aby zainstalować pakiet w środowisku wirtualnym. Idealnie byłoby, gdyby $ SDIST_CACHE zostałoby zatwierdzone pod kontrolą źródła. Podczas wdrażania w środowisku produkcyjnym należy uruchomić tylko drugie polecenie pip, aby zainstalować pakiety bez ich pobierania.
źródło
Począwszy od wersji 6.0 ,
pip
teraz ma własne buforowanie:Więcej informacji z powyższego linku :
źródło
Pip Wheel to doskonała opcja, która robi to, co chcesz, z dodatkową funkcją wstępnej kompilacji pakietów. Z oficjalnych dokumentów :
Teraz twój
/tmp/wheelhouse
katalog ma prekompilowane wszystkie zależności, więc możesz skopiować folder na inny serwer i zainstalować wszystko za pomocą tego polecenia:Zwróć uwagę, że nie wszystkie pakiety będą w pełni przenośne między maszynami. Niektóre pakiety zostaną zbudowane specjalnie dla używanej wersji Pythona, dystrybucji systemu operacyjnego i / lub architektury sprzętowej. Będzie to określone w nazwie pliku, jak w
-cp27-none-linux_x86_64
przypadku CPython 2.7 w 64-bitowym systemie Linux itp.źródło
Używając tylko pip (moja wersja to 1.2.1), możesz również zbudować lokalne repozytorium w następujący sposób:
W pierwszym wywołaniu pip pakiety z pliku wymagań są wyszukiwane w lokalnym repozytorium (tylko), a następnie instalowane z niego. Jeśli to się nie powiedzie, pip pobiera pakiety ze swojej zwykłej lokalizacji (np. PyPI) i pobiera je do
PIP_SDIST_INDEX
(ale niczego nie instaluje!). Pierwsze wywołanie jest „powtarzane”, aby poprawnie zainstalować pakiet z lokalnego indeksu.(
--download-cache
tworzy lokalną nazwę pliku, która jest pełnym adresem URL ze znakami ucieczki, a pip nie może użyć tego jako indeksu z--find-links
.--download-cache
użyje pliku z pamięci podręcznej, jeśli zostanie znaleziony. Moglibyśmy dodać tę opcję do drugiego wywołania pip, ale ponieważ indeks już działa jako rodzaj pamięci podręcznej, niekoniecznie musi dużo przynosić. Pomogłoby na przykład opróżnienie indeksu).źródło
Pojawiło się nowe rozwiązanie tego problemu, zwane pip-accel , zamiennik typu drop-in
pip
z wbudowanym buforowaniem.Widzieliśmy około 10-krotne przyspieszenie przejścia z
pip
napip-accel
.źródło
Prostszą opcją jest
basket
.Z podaną nazwą pakietu, pobierze go i wszystkie zależności do centralnej lokalizacji; bez żadnych wad pamięci podręcznej pip. To jest świetne do użytku w trybie offline.
Możesz następnie użyć tego katalogu jako źródła dla
pip
:Lub
easy_install
:Możesz również użyć go do aktualizacji koszyka, gdy jesteś online.
źródło
Myślę, że pakiet „pip-accel” musi być dobrym wyborem.
źródło