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

111

Recientemente he visto que --no-cache-dirse usa en un archivo Docker. Nunca había visto esa bandera antes y la ayuda no la explica:

 --no-cache-dir              Disable the cache.
  1. Pregunta: ¿Qué se almacena en caché?
  2. Pregunta: ¿Para qué se usa la caché?
  3. Pregunta: ¿Por qué querría deshabilitarlo?
Martín Thoma
fuente
Longshot en q3: ¿ahorrar algo de RAM?
Ma0
4
La documentación es bastante extensa sobre eso: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan
2
el primer resultado de Google ofrece una descripción bastante buena de su uso pip.pypa.io/en/stable/reference/pip_install
mikea
3
Cuando crea una imagen de la ventana acoplable, desea que sea clara. Esto ayuda a evitar que la imagen se hinche con archivos almacenados en caché.
Victor Lamoine
2
@mikea Irónicamente, pip no-cache-direste es ahora el primer resultado.
hlongmore

Respuestas:

90
  1. En caché es : almacenar en la clandestinidad o para uso futuro
  2. Usado para
  • almacenar los archivos de instalación ( .whl, etc.) de los módulos que instala a través de pip
  • almacenar los archivos de origen ( .tar.gz, etc.) para evitar que se vuelvan a descargar cuando no hayan expirado
  1. Posible motivo por el que es posible que desee deshabilitar la caché:
  • no tienes espacio en tu disco duro
  • ejecutado previamente pip installcon configuraciones inesperadas
    • p.ej:
      • previamente ejecutado export PYCURL_SSL_LIBRARY=nssypip install pycurl
      • quiero una nueva carrera export PYCURL_SSL_LIBRARY=opensslypip 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

Apilar
fuente
¿Por qué querría almacenar los archivos de instalación?
Martin Thoma
7
Para evitar descargar una y otra vez. Supongamos que desinstala un módulo, cuando lo instale la próxima vez, usará los archivos del directorio en caché
Pila
7
Ah, vale. Entonces, para una imagen de la ventana 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?
Martin Thoma
6
Sí, @MartinThoma, en una imagen de la ventana acoplable de producción, desea utilizar 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
2
Jaja, no creo que el OP signifique "¿qué significa 'caché'?" para la pregunta 1.
Arel
50

Creo que hay una buena razón para usarlo --no-cache-dircuando se crean 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 deshabilitando el caché.

Philip Tzou
fuente
7
puede usar ENV PIP_NO_CACHE_DIR=1en la ventana acoplable para python 3.6.10 y imágenes superiores
Levon
9

Otra razón para deshabilitar la 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 construimos AMI de Amazon en un chroot: pip se ejecuta como un usuario que existe en la máquina del compilador, 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 ssh a lo que se acaba de construir ya que su directorio .ssh no es legible para ellos.

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

PacketFiend
fuente
4

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

Zoe la paranoica
fuente
0

Recibo un error de permiso para la instalación de algunos paquetes pip si no uso la --no-cache-diropció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 /.cacheLa carpeta no ayudó por alguna razón, pero --no-cache-dirfunciona bien.

Harvey
fuente