¿Para qué sirve `–no-cache-dir` de pip?

5 minutos de lectura

Recientemente he visto el --no-cache-dir siendo utilizado en un archivo Docker. Nunca antes había visto esa bandera y la ayuda no la explica:

 --no-cache-dir              Disable the cache.
  1. Pregunta: ¿Qué se almacena en caché?
  2. Pregunta: ¿Para qué sirve el caché?
  3. Pregunta: ¿Por qué querría desactivarlo?

  • longshot en q3: ¿para ahorrar algo de RAM?

    – Ma0

    9 de agosto de 2017 a las 15:22

  • La documentación es bastante extensa sobre eso: pip.pypa.io/en/stable/reference/pip_install/#caching

    – emredjan

    9 de agosto de 2017 a las 15:24

  • el primer resultado de Google da una descripción bastante buena de su uso pip.pypa.io/en/stable/reference/pip_install

    – mikea

    9 de agosto de 2017 a las 15:24

  • Cuando está creando una imagen acoplable, desea que sea ligera. Esto ayuda a evitar que la imagen se llene de archivos almacenados en caché.

    – Víctor Lamoine

    11 de junio de 2018 a las 18:17

  • @mikea Irónicamente, por pip no-cache-direste es ahora el primer resultado.

    – hlongmore

    1 oct 2018 a las 21:08

avatar de usuario
Pila

  1. en caché es: almacenar en la clandestinidad o para uso futuro
  2. Usado para
  • almacenar los archivos de instalación (.whletc) de los módulos que instalas a través de pip
  • almacenar los archivos fuente (.tar.gzetc) para evitar volver a descargar cuando no haya caducado
  1. Razón posible es posible que desee deshabilitar el caché:
  • no tienes espacio en tu disco duro
  • ejecutado anteriormente pip install con inesperado ajustes
    • p.ej:
      • ejecutado previamente export PYCURL_SSL_LIBRARY=nss y pip install pycurl
      • quiero una nueva carrera export PYCURL_SSL_LIBRARY=openssl y pip install pycurl --compile --no-cache-dir
  • desea mantener una imagen de Docker lo más pequeña posible

Enlaces a la documentación

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

  • ¿Por qué querría almacenar los archivos de instalación?

    – Martín Tomas

    9 de agosto de 2017 a las 15:31

  • Para evitar descargar una y otra vez. Supongamos que desinstala un módulo, cuando lo instale la próxima vez, utilizará los archivos del directorio almacenado en caché.

    – Pila

    9 de agosto de 2017 a las 15:33

  • Está bien. Entonces, para una imagen acoplable que solo se usa para la implementación (por lo tanto, no hay acciones “manuales”), no hay razón para no usar --no-cache-dir¿correcto?

    – Martín Tomas

    9 de agosto de 2017 a las 15:58

  • Sí, @MartinThoma, en una imagen acoplable de producción, desea usar pip –no-cache-dir, porque nadie más instalará ningún paquete, y el espacio de almacenamiento es aún más valioso…

    – Ozgur Ozturk

    19/07/2018 a las 15:50

  • Jaja, no creo que el OP haya querido decir “¿qué significa ‘almacenado en caché’?” para la pregunta 1

    – Arel

    15 de enero de 2019 a las 19:09

avatar de usuario
felipe tzou

Creo que hay una buena razón para usar --no-cache-dir cuando está creando imágenes de Docker. El caché generalmente es inútil en una imagen de Docker, y definitivamente puede reducir el tamaño de la imagen al deshabilitar el caché.

  • puedes usar ENV PIP_NO_CACHE_DIR=1 en docker para python 3.6.10 e imágenes superiores

    – Levón

    19 de febrero de 2020 a las 0:36


  • Fwiw, con pip 18.1 necesitas establecer un valor falso para que env var funcione. Para cualquier otra cosa obtengo un TypeError: expected str, bytes or os.PathLike object, not int ya que el valor se analiza en un posixpath.

    – dtk

    22 de febrero de 2021 a las 11:48


  • RUN pip install --no-cache-dir -r requirements.txt Imágenes de docker

    – Timothy LJ Stewart

    23 abr a las 22:02

  • ¿Sigue siendo esto importante en construcciones de varias etapas?

    – Alex Peters

    5 de junio a las 12:16

  • @AlexPeters Depende de cómo hagas las compilaciones de varias etapas. Encontré que la forma más limpia es instalar paquetes en la imagen del generador y copiar todo site-packages/ a la imagen final. De esta manera, no necesita usar ningún parámetro adicional de pip ya que los cache no se copian.

    – Felipe Tzou

    6 de junio a las 16:08


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 la raíz.

Esto nos sucede cuando construimos AMI de Amazon en un chroot: pip se ejecuta como un usuario que existe en la máquina de construcción, pero no en la cárcel chroot donde se está construyendo la AMI. Esto es problemático ya que ese usuario específico ahora no puede acceder a lo que se acaba de crear, ya que no pueden leer su directorio .ssh.

Sin embargo, no puedo pensar en ninguna otra razón por la que pip se ejecutaría como un usuario que no existe, por lo que es un caso extremo.

Reduzca el tamaño de la imagen de la ventana acoplable si tiene dependencias de Python en su DockerFile, ya que sus registros/artefactos privados o sus servicios de implementación pueden tener limitaciones de tamaño.

Recibo un error de permiso para la instalación de algunos paquetes pip si no uso --no-cache-dir opción.

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 /.cache carpeta no ayudó por alguna razón, pero con --no-cache-dir funciona bien

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad