À quoi sert le `--no-cache-dir` de pip?


111

J'ai récemment vu --no-cache-dirêtre utilisé dans un fichier Docker. Je n'ai jamais vu ce drapeau auparavant et l'aide ne l'explique pas:

 --no-cache-dir              Disable the cache.
  1. Question: Qu'est-ce qui est mis en cache?
  2. Question: À quoi sert le cache?
  3. Question: Pourquoi voudrais-je le désactiver?

Longshot sur Q3: pour économiser de la RAM?
Ma0

4
La documentation est assez complète à ce sujet: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan

2
le premier résultat google donne une assez bonne description de son utilisation pip.pypa.io/en/stable/reference/pip_install
mikea

3
Lorsque vous créez une image Docker, vous voulez qu'elle soit claire. Cela permet d'éviter de gonfler l'image avec les fichiers mis en cache.
Victor Lamoine

2
@mikea Ironiquement, pip no-cache-dirc'est maintenant le premier résultat.
hlongmore

Réponses:


90
  1. En cache, c'est : ranger dans la clandestinité ou pour une utilisation future
  2. Utilisé pour
  • stocker les fichiers d'installation ( .whl, etc.) des modules que vous installez via pip
  • stocker les fichiers source ( .tar.gz, etc.) pour éviter de re-télécharger lorsqu'ils ne sont pas expirés
  1. Raison possible pour laquelle vous souhaiterez peut-être désactiver le cache:
  • vous n'avez pas d'espace sur votre disque dur
  • précédemment exécuté pip installavec des paramètres inattendus
    • par exemple:
      • précédemment exécuté export PYCURL_SSL_LIBRARY=nssetpip install pycurl
      • veux une nouvelle course export PYCURL_SSL_LIBRARY=openssletpip install pycurl --compile --no-cache-dir
  • vous souhaitez conserver une image Docker aussi petite que possible

Liens vers la documentation

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


Pourquoi voudrais-je stocker les fichiers d'installation?
Martin Thoma

7
Pour éviter de télécharger encore et encore. Supposons que vous désinstallez un module, lorsque vous l'installez la prochaine fois, il utilisera les fichiers du répertoire mis en cache
Pile

7
Ah ok. Donc pour une image de docker qui n'est utilisée que pour le déploiement (donc pas d'actions "manuelles" ") il n'y a aucune raison de ne pas l'utiliser --no-cache-dir, n'est-ce pas ?
Martin Thoma

6
Oui @MartinThoma, sur une image de docker de production, vous voulez utiliser pip --no-cache-dir, car personne d'autre n'installera de paquet, et l'espace de stockage est encore plus précieux ...
Ozgur Ozturk

2
Haha, je ne pense pas que l'OP signifiait "que signifie" caché "?" pour la question 1.
Arel

50

Je pense qu'il y a une bonne raison à utiliser --no-cache-dirlorsque vous créez des images Docker. Le cache est généralement inutile dans une image Docker, et vous pouvez certainement réduire la taille de l'image en désactivant le cache.


7
vous pouvez utiliser ENV PIP_NO_CACHE_DIR=1dans le menu fixe pour python 3.6.10 et les images supérieures
Levon

9

Une autre raison de désactiver le cache pip - si vous exécutez pip en tant qu'utilisateur qui n'existe pas encore, leur répertoire personnel sera créé, mais possédé par root.

Cela nous arrive lorsque nous construisons des AMI Amazon dans un chroot - pip est exécuté en tant qu'utilisateur existant sur la machine de construction, mais pas dans la prison chroot où l'AMI est en cours de construction. Ceci est problématique car cet utilisateur spécifique ne peut maintenant pas ssh sur ce qui vient d'être construit car leur répertoire .ssh n'est pas lisible par eux.

Je ne peux penser à aucune autre raison pour laquelle pip serait exécuté en tant qu'utilisateur qui n'existe pas, donc c'est vraiment un cas limite.


4

Réduisez la taille de votre image docker si vous avez des dépendances python dans votre DockerFile, car vos registres / artefacts privés ou vos services de déploiement peuvent avoir une limitation de taille.


0

J'obtiens une erreur d'autorisation pour l'installation de certains packages pip si je n'utilise pas d' --no-cache-diroption.

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 /.cachedossier n'a pas aidé pour une raison quelconque, mais avec --no-cache-dircela fonctionne bien.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.