Wofür ist Pips `--no-cache-dir` gut?

111

Ich habe kürzlich gesehen, --no-cache-dirdass es in einer Docker-Datei verwendet wird. Ich habe diese Flagge noch nie gesehen und die Hilfe erklärt sie nicht:

 --no-cache-dir              Disable the cache.
  1. Frage: Was wird zwischengespeichert?
  2. Frage: Wofür wird der Cache verwendet?
  3. Frage: Warum sollte ich es deaktivieren wollen?
Martin Thoma
quelle
Longshot auf Q3: um etwas RAM zu sparen?
Ma0
4
Die Dokumentation dazu ist ziemlich umfangreich: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan
2
Das erste Google-Ergebnis gibt eine ziemlich gute Beschreibung seiner Verwendung pip.pypa.io/en/stable/reference/pip_install
mikea
3
Wenn Sie ein Docker-Image erstellen, soll es hell sein. Dies hilft zu vermeiden, dass das Bild mit zwischengespeicherten Dateien aufgebläht wird.
Victor Lamoine
2
@mikea Ironischerweise ist pip no-cache-dirdies jetzt das erste Ergebnis.
Hlongmore

Antworten:

89
  1. Zwischengespeichert ist : Versteckt oder zur zukünftigen Verwendung aufbewahren
  2. Benutzt für
  • Speichern Sie die Installationsdateien ( .whlusw.) der Module, die Sie über pip installieren
  • Speichern Sie die Quelldateien ( .tar.gzusw.), um ein erneutes Herunterladen zu vermeiden, wenn sie nicht abgelaufen sind
  1. Möglicher Grund , warum Sie den Cache deaktivieren möchten:
  • Sie haben keinen Speicherplatz auf Ihrer Festplatte
  • zuvor pip installmit unerwarteten Einstellungen ausgeführt
    • z.B:
      • zuvor ausgeführt export PYCURL_SSL_LIBRARY=nssundpip install pycurl
      • will neuen Lauf export PYCURL_SSL_LIBRARY=opensslundpip install pycurl --compile --no-cache-dir
  • Sie möchten ein Docker-Image so klein wie möglich halten

Links zur Dokumentation

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

Stapel
quelle
Warum sollte ich die Installationsdateien speichern wollen?
Martin Thoma
7
Um ein erneutes Herunterladen zu vermeiden. Angenommen, Sie deinstallieren ein Modul. Wenn Sie es das nächste Mal installieren, werden die Dateien aus dem zwischengespeicherten Verzeichnis verwendet
Stack
7
Ah, ok. Also für ein Docker-Image, das nur für die Bereitstellung verwendet wird (daher keine "manuellen" Aktionen "), gibt es keinen Grund, es nicht zu verwenden --no-cache-dir, richtig?
Martin Thoma
6
Ja @MartinThoma, auf einem Docker-Image für die Produktion möchten Sie pip --no-cache-dir verwenden, da sonst niemand Pakete installiert und der Speicherplatz noch wertvoller ist ...
Ozgur Ozturk
2
Haha, ich glaube nicht, dass das OP "Was bedeutet" zwischengespeichert "?" Bedeutete. für Frage 1.
Arel
49

Ich denke, es gibt einen guten Grund, --no-cache-dirwenn Sie Docker-Images erstellen. Der Cache ist in einem Docker-Image normalerweise unbrauchbar, und Sie können die Bildgröße definitiv verkleinern, indem Sie den Cache deaktivieren.

Philip Tzou
quelle
7
Sie können ENV PIP_NO_CACHE_DIR=1in Docker für Python 3.6.10 und höher Bilder verwenden
Levon
9

Ein weiterer Grund, den Pip-Cache zu deaktivieren: Wenn Sie pip als Benutzer ausführen, der noch nicht vorhanden ist, wird das Ausgangsverzeichnis erstellt, das sich jedoch im Besitz von root befindet.

Dies passiert uns, wenn Amazon AMIs in einer Chroot-Pip erstellt werden, die als Benutzer ausgeführt wird, der auf dem Builder-Computer vorhanden ist, jedoch nicht im Chroot-Gefängnis, in dem die AMI erstellt wird. Dies ist problematisch, da dieser bestimmte Benutzer jetzt nicht mehr auf das zugreifen kann, was gerade erstellt wurde, da sein .ssh-Verzeichnis für ihn nicht lesbar ist.

Ich kann mir keinen anderen Grund vorstellen, warum pip als Benutzer ausgeführt wird, der jedoch nicht existiert. Es handelt sich also um einen Randfall.

PacketFiend
quelle
4

Reduzieren Sie die Größe Ihres Docker-Images, wenn Sie Python-Abhängigkeiten in Ihrer Docker-Datei haben, da Ihre privaten Registrierungen / Artefakte oder Ihre Bereitstellungsdienste möglicherweise eine Größenbeschränkung aufweisen.

Zoe die Paranoide
quelle
0

Ich erhalte einen Berechtigungsfehler für die Installation einiger Pip-Pakete, wenn ich die --no-cache-dirOption nicht verwende .

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 /.cacheOrdner hat aus irgendeinem Grund nicht geholfen, aber --no-cache-dirdamit funktioniert es in Ordnung.

Harvey
quelle