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.
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.
Odpowiedzi:
Zgodnie z dokumentacją Pip :
Począwszy od wersji 6.0, pip zapewnia domyślnie włączoną pamięć podręczną, która działa podobnie do przeglądarki internetowej. Chociaż pamięć podręczna jest domyślnie włączona i została zaprojektowana, aby robić to, co należy, domyślnie możesz ją wyłączyć i zawsze uzyskiwać dostęp do PyPI, korzystając z tej
--no-cache-dir
opcji.
Dlatego zaktualizowaną odpowiedzią jest użycie pip z domyślnymi ustawieniami, jeśli chcesz mieć pamięć podręczną pobierania.
Z wiadomości pip , wersja 0.1.4:
Dodano obsługę zmiennej środowiskowej $ PIP_DOWNLOAD_CACHE, która będzie buforować pobieranie pakietów, więc przyszłe instalacje nie będą wymagały dużych pobrań. Dostęp do sieci jest nadal wymagany, ale podczas korzystania z niego można uniknąć tylko niektórych pobrań.
Aby to wykorzystać, dodałem do mojego ~/.bash_profile
:
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
lub, jeśli korzystasz z komputera Mac:
export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads
PIP_DOWNLOAD_CACHE
katalogu. Na przykład mam teraz sporo pakietów Django.virtualenvs
w samolocie, ale nadal jest świetne.Moim zdaniem pip2pi
jest dużo bardziej eleganckim i niezawodnym rozwiązaniem tego problemu.
Z dokumentów:
pip2pi buduje repozytorium pakietów zgodne z PyPI na podstawie wymagań pip
pip2pi
umożliwia stworzenie własnego indeksu PyPI za pomocą dwóch prostych poleceń:
Aby odzwierciedlić pakiet i wszystkie jego wymagania, użyj pip2tgz
:
$ cd /tmp/; mkdir package/
$ pip2tgz packages/ httpie==0.2
...
$ ls packages/
Pygments-1.5.tar.gz
httpie-0.2.0.tar.gz
requests-0.14.0.tar.gz
Aby zbudować indeks pakietu z poprzedniego katalogu:
$ ls packages/
bar-0.8.tar.gz
baz-0.3.tar.gz
foo-1.2.tar.gz
$ dir2pi packages/
$ find packages/
/httpie-0.2.0.tar.gz
/Pygments-1.5.tar.gz
/requests-0.14.0.tar.gz
/simple
/simple/httpie
/simple/httpie/httpie-0.2.0.tar.gz
/simple/Pygments
/simple/Pygments/Pygments-1.5.tar.gz
/simple/requests
/simple/requests/requests-0.14.0.tar.gz
Aby zainstalować z indeksu utworzonego w kroku 2, możesz po prostu użyć:
pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
Możesz nawet utworzyć kopię lustrzaną swojego własnego indeksu na zdalnym hoście za pomocą pip2pi
.
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.
Nowsze wersje Pipa teraz domyślnie buforują pobieranie. Zobacz tę dokumentację:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Utwórz plik konfiguracyjny o nazwie ~/.pip/pip.conf
i dodaj następującą zawartość:
[global]
download_cache = ~/.cache/pip
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.
pip.conf
z download_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:
pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>
Co spowoduje pobranie pakietu i umieszczenie go w katalogu wskazywanym przez $ SDIST_CACHE. Nie zainstaluje pakietu. A potem biegniesz:
pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name>
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.
Począwszy od wersji 6.0 , pip
teraz ma własne buforowanie:
- DEPRECATION
pip install --download-cache
ipip wheel --download-cache
flagi wiersza poleceń zostały wycofane, a funkcje usunięte. Ponieważ pip teraz automatycznie konfiguruje i używa swojej wewnętrznej pamięci podręcznej HTTP, która zastępuje--download-cache
istniejące opcje, przestała działać, ale będzie nadal akceptowana do czasu ich usunięcia w pip v8.0. Więcej informacji można znaleźć pod adresem https://pip.pypa.io/en/latest/reference/pip_install.html#caching
Więcej informacji z powyższego linku :
Począwszy od wersji 6.0, pip zapewnia domyślnie włączoną pamięć podręczną, która działa podobnie do przeglądarki internetowej. Chociaż pamięć podręczna jest domyślnie włączona i została zaprojektowana, aby robić to, co należy, domyślnie możesz ją wyłączyć i zawsze uzyskiwać dostęp do PyPI, korzystając z tej
--no-cache-dir
opcji.
Pip Wheel to doskonała opcja, która robi to, co chcesz, z dodatkową funkcją wstępnej kompilacji pakietów. Z oficjalnych dokumentów :
Zbuduj koła dla wymagania (i wszystkich jego zależności):
$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
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:
$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage
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.
Używając tylko pip (moja wersja to 1.2.1), możesz również zbudować lokalne repozytorium w następujący sposób:
if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
pip install --download-directory="$PIP_SDIST_INDEX" <package>
pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
fi
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).
Pojawiło się nowe rozwiązanie tego problemu, zwane pip-accel , zamiennik typu drop-in pip
z wbudowanym buforowaniem.
Program pip-accel jest opakowaniem dla pip, menedżera pakietów Pythona. Przyspiesza użycie pip do zainicjowania środowisk wirtualnych Pythona, biorąc pod uwagę jeden lub więcej plików wymagań. Czyni to poprzez połączenie następujących dwóch podejść:
Pliki do pobrania dystrybucji źródłowej są buforowane i używane do generowania lokalnego indeksu archiwów dystrybucji źródłowej.
Dystrybucje binarne służą do przyspieszenia procesu instalowania zależności z komponentami binarnymi (takimi jak M2Crypto i LXML). Zamiast ponownie kompilować te zależności dla każdego środowiska wirtualnego, kompilujemy je raz i buforujemy wynik w postaci binarnej dystrybucji * .tar.gz.
Paylogic używa pip-accel do szybkiego i niezawodnego inicjowania środowisk wirtualnych na swojej farmie niewolników ciągłej integracji, które stale przeprowadzają testy jednostkowe (był to jeden z oryginalnych przypadków użycia, dla których opracowano pip-accel). Używamy go również na naszych serwerach kompilacji.
Widzieliśmy około 10-krotne przyspieszenie przejścia z pip
na pip-accel
.
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
:
pip install --no-index -f file:///path/to/basket package
Lub easy_install
:
easy_install -f ~/path/to/basket -H None package
Możesz również użyć go do aktualizacji koszyka, gdy jesteś online.
Myślę, że pakiet „pip-accel” musi być dobrym wyborem.