¿Para qué sirve `--no-cache-dir` de pip?
Recientemente vi su --no-cache-dir
uso en un archivo Docker. Nunca había visto esa bandera antes y la ayuda no la explica:
--no-cache-dir Disable the cache.
- Pregunta: ¿Qué se almacena en caché?
- Pregunta: ¿Para qué se utiliza el caché?
- Pregunta: ¿Por qué querría desactivarlo?
- En caché es : almacenar en un lugar oculto o para uso futuro
- Usado para
- almacenar los archivos de instalación (
.whl
, etc) de los módulos que instala a través de pip - almacene los archivos fuente (
.tar.gz
, etc.) para evitar volver a descargarlos cuando no hayan caducado
- Posible motivo por el que es posible que desees desactivar el caché:
- no tienes espacio en tu disco duro
- ejecutado previamente
pip install
con configuraciones inesperadas- p.ej:
- ejecutado previamente
export PYCURL_SSL_LIBRARY=nss
ypip install pycurl
- quiero una nueva carrera
export PYCURL_SSL_LIBRARY=openssl
ypip install pycurl --compile --no-cache-dir
- ejecutado previamente
- p.ej:
- desea mantener una imagen de Docker lo más pequeña posible
Enlaces a documentación
https://pip.pypa.io/en/stable/reference/pip_install/#caching – @emredjan https://pip.pypa.io/en/stable/reference/pip_install/ - @mikea
Creo que hay una buena razón para utilizarlo --no-cache-dir
cuando se crean imágenes de Docker. El caché suele ser inútil en una imagen de Docker y definitivamente puede reducir el tamaño de la imagen deshabilitando el caché.
Otra razón para deshabilitar el caché de pip: si ejecuta pip como un usuario que aún no existe, se creará su directorio de inicio, pero será propiedad de root.
Esto nos sucede cuando creamos AMI de Amazon en un chroot: pip se ejecuta como un usuario que existe en la máquina del creador, pero no en la cárcel de chroot donde se construye el AMI. Esto es problemático ya que ese usuario específico ahora no puede acceder mediante ssh a lo que se acaba de crear, ya que no puede leer su directorio .ssh.
Sin embargo, no se me ocurre ninguna otra razón por la que pip se ejecute como un usuario que no existe, por lo que es en gran medida un caso extremo.