Do czego służy opcja `--no-cache-dir` pip?

111

Niedawno widziałem, jak --no-cache-dirjest używany w pliku Docker. Nigdy wcześniej nie widziałem tej flagi, a pomoc nie wyjaśnia tego:

 --no-cache-dir              Disable the cache.
  1. Pytanie: Co jest buforowane?
  2. Pytanie: Do czego służy pamięć podręczna?
  3. Pytanie: Dlaczego miałbym chcieć to wyłączyć?
Martin Thoma
źródło
longshot na Q3: zaoszczędzić trochę pamięci RAM?
Ma0,
4
Dokumentacja na ten temat jest dość obszerna: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan
2
pierwszy wynik google daje całkiem dobry opis jego użycia pip.pypa.io/en/stable/reference/pip_install
mikea
3
Kiedy tworzysz obraz dockera, chcesz, aby był lekki. Pomaga to uniknąć nadymania obrazu przez pliki w pamięci podręcznej.
Victor Lamoine,
2
@mikea Jak na ironię, bo pip no-cache-dirto jest teraz pierwszy wynik.
hlongmore

Odpowiedzi:

90
  1. Buforowany to : przechowywać w ukryciu lub do wykorzystania w przyszłości
  2. Używany do
  • przechowuj pliki instalacyjne ( .whlitp.) modułów, które instalujesz za pomocą pip
  • przechowywać pliki źródłowe ( .tar.gzitp.), aby uniknąć ponownego pobierania, gdy nie wygasły
  1. Możliwy powód, dla którego możesz chcieć wyłączyć pamięć podręczną:
  • nie masz miejsca na dysku twardym
  • wcześniej działał pip installz nieoczekiwanymi ustawieniami
    • na przykład:
      • poprzednio uruchomione export PYCURL_SSL_LIBRARY=nssipip install pycurl
      • chcę nowy bieg export PYCURL_SSL_LIBRARY=opensslipip install pycurl --compile --no-cache-dir
  • chcesz, aby obraz Dockera był jak najmniejszy

Linki do dokumentacji

https://pip.pypa.io/en/stable/reference/pip_install/#caching - @emredjan https://pip.pypa.io/en/stable/reference/pip_install/ - @mikea

Stos
źródło
Dlaczego miałbym chcieć przechowywać pliki instalacyjne?
Martin Thoma
7
Aby uniknąć wielokrotnego pobierania. Załóżmy, że odinstalowujesz moduł, a gdy zainstalujesz go następnym razem, użyje on plików z katalogu w pamięci podręcznej
Stack
7
Ach, ok. Więc dla obrazu Döcker który jest używany tylko do wdrożenia (stąd brak „ręczne” działania "), nie ma powodu, aby nie używać --no-cache-dir, prawda?
Martin Thoma
6
Tak @MartinThoma, na obrazie Döcker produkcja, chcesz używać pip --no-cache-dir, ponieważ nikt inny nie będzie zainstalować żadnych pakietów, a miejsca jest jeszcze bardziej cenne ...
Ozgur Ozturk
2
Haha, nie sądzę, żeby OP oznaczało "co oznacza 'buforowany'?" dla pytania 1.
Arel
50

Myślę, że jest dobry powód, aby używać go --no-cache-dirpodczas tworzenia obrazów Dockera. Pamięć podręczna jest zwykle bezużyteczna w obrazie Dockera i zdecydowanie można zmniejszyć rozmiar obrazu, wyłączając pamięć podręczną.

Philip Tzou
źródło
7
można używać ENV PIP_NO_CACHE_DIR=1w Docker dla obrazów Pythona 3.6.10 i nowszych
Levon
9

Kolejny powód, aby wyłączyć pamięć podręczną pip - jeśli uruchomisz pip jako użytkownik, który jeszcze nie istnieje, zostanie utworzony jego katalog domowy, ale będący własnością roota.

Dzieje się tak, gdy budujemy Amazon AMI w chroot - pip jest uruchamiany jako użytkownik, który istnieje na maszynie budującej, ale nie w więzieniu chroot, gdzie konstruowany jest AMI. Jest to problematyczne, ponieważ ten konkretny użytkownik nie może teraz ssh do tego, co właśnie zostało zbudowane, ponieważ jego katalog .ssh nie jest dla nich czytelny.

Nie przychodzi mi do głowy żaden inny powód, dla którego pip miałby być uruchamiany jako użytkownik, który nie istnieje, więc jest to bardzo ważny przypadek.

PacketFiend
źródło
4

Zmniejsz rozmiar obrazu platformy Docker, jeśli masz zależności języka Python w pliku DockerFile, ponieważ Twoje prywatne rejestry / artefaktory lub usługi wdrażania mogą mieć ograniczenie rozmiaru.

Zoe The Paranoid
źródło
0

Jeśli nie używam --no-cache-diropcji, pojawia się błąd uprawnień do instalacji niektórych pakietów pip .

Building wheels for collected packages: pyyaml, bottleneck, nvidia-ml-py3
  WARNING: Building wheel for pyyaml failed: [Errno 13] Permission denied: '/home/user/.cache/pip/wheels/b1'
  WARNING: Building wheel for bottleneck failed: [Errno 13] Permission denied: '/home/user/.cache/pip/wheels/92'
  WARNING: Building wheel for nvidia-ml-py3 failed: [Errno 13] Permission denied: '/home/user/.cache/pip/wheels/7f'

chown /.cachefolder nie pomógł z jakiegoś powodu, ale z --no-cache-dirnim działa dobrze.

Harvey
źródło