2012-04-26 34 views
53

Jak zapobiec ponownemu pobieraniu wcześniej pobranych pakietów z PIP? Testuję instalację matplotlib, pakiet 11 MB, który zależy od kilku pakietów specyficznych dla dystrybucji. Za każdym razem, gdy uruchamiam pip install matplotlib, to ponownie pobiera matplotlib. Jak mogę to zatrzymać?Jak buforować pobrane pakiety PIP

Odpowiedz

54

Możesz użyć określonej zmiennej środowiskowej PIP_DOWNLOAD_CACHE i wskazać katalog, w którym będą przechowywane twoje pakiety. Jeśli mają zostać zainstalowane ponownie, zostaną one pobrane z tego katalogu.

Wydaje się, że istnieje również dodatkowa opcja dla PIP pip --download-cache, która powinna zrobić coś podobnego, ale nigdy nie próbowałem tego sam. Na swoim przykładzie, aby uniknąć ponownego pobierania matplotlib za każdym razem, należy wykonać następujące czynności:

pip install --download-cache /path/to/pip/cache matplotlib 

Czy to odpowiedź na pytanie?

+0

Nie jestem pewien, czy PIP to robi, ale z ' easy_install', jeśli masz pakiet jako plik '.tar' (lub przypuszczalnie zip?) w katalogu lokalnym, spróbuje najpierw użyć tego pakietu. –

+2

Zajrzyj także do [pip-accel] (https://pypi.python.org/pypi/pip-accel). To nowe i lepsze rozwiązanie tego problemu. – qris

+8

z pip 8 '--download-cache' został usunięty, pip powinien domyślnie używać cache'u, który można wyłączyć za pomocą' --no-cache-dir' – Ski

8

Mogłeś

# download and extract package to build path 
pip install --no-install matplotlib 

# the build path could be found by 
pip install --help|grep Unpack\ packages\ into -A 2 

# then rm pip-delete-this-directory.txt inside the build path 
# this prevent pip from removing package from the build directory after install 
# you could check the content of the file 
rm build/pip-delete-this-directory.txt 

# from now on you could install matplotlib quickly 
# this uses single build directory 
# and can speed up compiling by caching intermediate objects. 
pip install --no-download matplotlib 

Ponadto, można ręcznie pobrać pakiet

pip install -d dir_for_packages matplotlib 

następnie zainstalować go przez un-tar i python setup install później.

Działa w podobny sposób z dodatkowym sprawdzaniem: najpierw wyszukuje najnowszą lub wyspecyfikowaną wersję docelowego pakietu z sieci, jeśli wyszukiwanie zakończyło się wynikiem i jest buforowany pakiet w katalogu określonym przez download-cache, buforowany pakiet będzie używany zamiast pobierania. Na przykład,

pip install --download-cache . pymongo 

pobierze pymongo pakietu do bieżącego katalogu:

http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpymongo%2Fpymongo-2.1.1.tar.gz 
http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpymongo%2Fpymongo-2.1.1.tar.gz.content-type 
106

dla nowych wersji PIP:

Nowsze wersje Pip domyślnie teraz cache pobierania. Zobacz tę dokumentację:

https://pip.pypa.io/en/stable/reference/pip_install/#caching

Dla starszych wersji PIP:

utworzyć plik konfiguracyjny o nazwie ~/.pip/pip.conf i dodaj następującą zawartość:

[global] 
download_cache = ~/.cache/pip 

W jednym poleceniem:

printf '[global]\ndownload_cache = ~/.cache/pip\n' >> ~/.pip/pip.conf 
+0

Fajnie, łatwo i nie musisz pamiętać o dodaniu parametru za każdym razem. Zmarnowałem dużo Gb-owego ponownego pobierania gówna. Dziękuję Ci. – erm3nda

+0

Dziękujemy, jeśli użyjesz pip3 do pobrania wymagań i otrzymasz ostrzeżenie o żółtym tekście, możesz mkdir ~/.cache/pip, a ostrzeżenie zniknie. –

Powiązane problemy