Para que serve `--no-cache-dir` do pip?

111

Recentemente, vi o --no-cache-dirsendo usado em um arquivo Docker. Nunca vi essa bandeira antes e a ajuda não está explicando isso:

 --no-cache-dir              Disable the cache.
  1. Questão: O que é armazenado em cache?
  2. Questão: que é usado o cache?
  3. Pergunta: Por que devo desativá-lo?
Martin Thoma
fonte
longshot no q3: para economizar RAM?
Ma0
4
A documentação é bastante extensa sobre isso: pip.pypa.io/en/stable/reference/pip_install/#caching
emredjan
2
o primeiro resultado do Google fornece uma boa descrição de seu uso pip.pypa.io/en/stable/reference/pip_install
mikea
3
Ao construir uma imagem docker, você deseja que ela seja clara. Isso ajuda a evitar o inchaço da imagem com arquivos em cache.
Victor Lamoine
2
@mikea Ironicamente, pois pip no-cache-direste é agora o primeiro resultado.
hlongmore 01 de

Respostas:

90
  1. Em cache é : armazene escondido ou para uso futuro
  2. Usado para
  • armazene os arquivos de instalação (.whl , etc) dos módulos que você instalar através do pip
  • armazene os arquivos de origem ( .tar.gz, etc) para evitar um novo download quando não expirado
  1. Possível razão pela qual você deseja desativar o cache:
  • você não tem espaço no seu disco rígido
  • executado anteriormente pip installcom configurações inesperadas
    • por exemplo:
      • executado anteriormente export PYCURL_SSL_LIBRARY=nssepip install pycurl
      • quer uma nova corrida export PYCURL_SSL_LIBRARY=opensslepip install pycurl --compile --no-cache-dir
  • você deseja manter uma imagem Docker tão pequena quanto possível

Links para documentação

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

Pilha
fonte
Por que eu iria querer armazenar os arquivos de instalação?
Martin Thoma
7
Para evitar baixar novamente e novamente. Suponha que você desinstale um módulo, quando instalá-lo da próxima vez, ele usará os arquivos do diretório em cache
Pilha de
7
Ah ok. Portanto, para uma imagem docker que é usada apenas para implantação (portanto, sem "ações" manuais), não há razão para não usar --no-cache-dir, correto?
Martin Thoma
6
Sim @MartinThoma, em uma imagem docker de produção, você deseja usar pip --no-cache-dir, porque ninguém mais instalará nenhum pacote e o espaço de armazenamento é ainda mais valioso ...
Ozgur Ozturk
2
Haha Eu não acho que o OP significa "o que 'em cache' significa?" para a pergunta 1.
Arel
50

Acho que há um bom motivo para usar --no-cache-dirquando você estiver criando imagens do Docker. O cache geralmente é inútil em uma imagem Docker e você pode definitivamente reduzir o tamanho da imagem desativando o cache.

Philip Tzou
fonte
7
você pode usar ENV PIP_NO_CACHE_DIR=1no docker para python 3.6.10 e imagens superiores
Levon
9

Outro motivo para desabilitar o cache do pip - se você executar o pip como um usuário que ainda não existe, seu diretório inicial será criado, mas pertencente ao root.

Isso acontece conosco quando a construção de Amazon AMIs em um chroot - pip está sendo executado como um usuário que existe na máquina do construtor, mas não na jaula chroot onde a AMI está sendo construída. Isso é problemático, pois esse usuário específico agora não pode usar ssh para o que foi criado, pois seu diretório .ssh não pode ser lido por eles.

Não consigo pensar em nenhum outro motivo pelo qual o pip seria executado como um usuário que não existe, então é um caso extremo.

PacketFiend
fonte
4

Reduza o tamanho da imagem do docker se você tiver dependências do Python em seu DockerFile, pois seus registros / artefatos privados ou seus serviços de implantação podem ter limitação de tamanho.

Zoe, a Paranóica
fonte
0

Recebo erro de permissão para instalação de alguns pacotes pip se não usar a --no-cache-diropção.

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 /.cachepasta não ajudou por algum motivo, mas com --no-cache-direle funciona bem.

Harvey
fonte