A cosa serve `--no-cache-dir` di pip?


111

Recentemente ho visto l' --no-cache-dirutilizzo in un file Docker. Non ho mai visto quella bandiera prima e l'aiuto non lo spiega:

 --no-cache-dir              Disable the cache.
  1. Domanda: che cos'è la cache?
  2. Domanda: a cosa serve la cache?
  3. Domanda: perché dovrei disabilitarlo?

longshot su q3: risparmiare un po 'di RAM?
maggio

4
La documentazione è piuttosto ampia su questo: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan

2
il primo risultato di Google fornisce una descrizione abbastanza buona di esso di utilizzo pip.pypa.io/en/stable/reference/pip_install
mikea

3
Quando crei un'immagine finestra mobile, vuoi che sia leggera. Questo aiuta a evitare di gonfiare l'immagine con i file memorizzati nella cache.
Victor Lamoine

2
@mikea Ironia della sorte, pip no-cache-dirquesto è ora il primo risultato.
hlongmore

Risposte:


90
  1. Memorizzato nella cache è : riporre nascosto o per un uso futuro
  2. Usato per
  • memorizzare i file di installazione ( .whl, ecc.) dei moduli installati tramite pip
  • memorizzare i file di origine ( .tar.gz, ecc.) per evitare il nuovo download quando non scaduti
  1. Possibile motivo per cui potresti voler disabilitare la cache:
  • non hai spazio sul tuo disco rigido
  • eseguito in precedenza pip installcon impostazioni impreviste
    • per esempio:
      • eseguito in precedenza export PYCURL_SSL_LIBRARY=nssepip install pycurl
      • voglio una nuova corsa export PYCURL_SSL_LIBRARY=opensslepip install pycurl --compile --no-cache-dir
  • vuoi mantenere un'immagine Docker più piccola possibile

Collegamenti alla documentazione

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


Perché dovrei archiviare i file di installazione?
Martin Thoma

7
Per evitare di scaricare ancora e ancora. Supponiamo che tu disinstalli un modulo, quando lo installi la prossima volta, utilizzerà i file dalla directory cache
Stack

7
Ah ok. Quindi per un'immagine docker che viene utilizzata solo per la distribuzione (quindi nessuna "azione" manuale) non c'è motivo per non usarla --no-cache-dir, giusto?
Martin Thoma

6
Sì @MartinThoma, su un'immagine docker di produzione, vuoi usare pip --no-cache-dir, perché nessun altro installerà alcun pacchetto e lo spazio di archiviazione è ancora più prezioso ...
Ozgur Ozturk

2
Haha Non penso che l'OP significasse "cosa significa" memorizzato nella cache "?" per la domanda 1.
Arel

50

Penso che ci sia un buon motivo per usarlo --no-cache-dirquando si creano immagini Docker. La cache è solitamente inutile in un'immagine Docker e puoi sicuramente ridurre la dimensione dell'immagine disabilitando la cache.


7
puoi usare ENV PIP_NO_CACHE_DIR=1nella finestra mobile per python 3.6.10 e immagini successive
Levon

9

Un altro motivo per disabilitare la cache pip: se esegui pip come utente che non esiste ancora, verrà creata la loro home directory, ma di proprietà di root.

Questo accade a noi quando creiamo AMI Amazon in un chroot - pip viene eseguito come un utente che esiste sulla macchina del builder, ma non nella cella chroot in cui viene costruita l'AMI. Questo è problematico in quanto quell'utente specifico ora non può eseguire ssh su ciò che è stato appena creato poiché la loro directory .ssh non è leggibile da loro.

Non riesco a pensare a nessun altro motivo per cui pip potrebbe essere eseguito come un utente che non esiste, quindi è un caso limite.


4

Riduci le dimensioni dell'immagine Docker se hai dipendenze Python nel DockerFile, poiché i tuoi registri / artifactories privati ​​oi tuoi servizi di distribuzione potrebbero avere limiti di dimensione.


0

Ottengo un errore di autorizzazione per l'installazione di alcuni pacchetti pip se non utilizzo l' --no-cache-diropzione.

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 /.cachecartella non ha aiutato per qualche motivo, ma --no-cache-dirfunziona bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.