Eu instalo muitos dos mesmos pacotes em diferentes ambientes de virtualenv . Existe uma maneira de baixar um pacote uma vez e depois instalar o pip a partir de um cache local?
Isso reduziria a largura de banda e o tempo de download.
virtualenv
pip
Matthew Rankin
fonte
fonte
Respostas:
Resposta atualizada 19-Nov-15
De acordo com a documentação do Pip :
Portanto, a resposta atualizada é usar apenas o pip com seus padrões, se você quiser um cache de download.
Resposta original
Das notícias do pip , versão 0.1.4:
Para tirar proveito disso, adicionei o seguinte ao meu
~/.bash_profile
:ou, se você estiver em um Mac:
Notas
PIP_DOWNLOAD_CACHE
diretório. Por exemplo, agora tenho muitos pacotes Django.virtualenvs
no avião, mas ainda é excelente.fonte
Na minha opinião,
pip2pi
é uma solução muito mais elegante e confiável para esse problema.Dos documentos:
pip2pi
permite criar seu próprio índice PyPI usando dois comandos simples:Para espelhar um pacote e todos os seus requisitos, use
pip2tgz
:Para criar um índice de pacote a partir do diretório anterior:
Para instalar a partir do índice que você criou na etapa 2., você pode simplesmente usar:
Você pode até espelhar seu próprio índice em um host remoto com
pip2pi
.fonte
pip2tgz
detecta se você já baixou o pacote para o diretório designado; portanto, se você executar a mesma linha de instalação ou várias linhas de instalação com dependências sobrepostas, ele fará o download de cada pacote apenas uma vez.Para versões mais recentes do Pip:
As versões mais recentes do Pip agora armazenam em cache os downloads por padrão. Consulte esta documentação:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Para versões mais antigas do Pip:
Crie um arquivo de configuração chamado
~/.pip/pip.conf
e adicione o seguinte conteúdo:No OS X, um caminho melhor para escolher seria
~/Library/Caches/pip
seguir a convenção que outros programas do OS X usam.fonte
pip.conf
umadownload_cache
configuração que aponte para o mesmo diretório de todo o sistema.PIP_DOWNLOAD_CACHE tem alguns problemas sérios. Mais importante, ele codifica o nome do host do download no cache, portanto, o uso de espelhos se torna impossível.
A melhor maneira de gerenciar um cache de downloads de pip é separar a etapa "baixar o pacote" da etapa "instalar o pacote". Os arquivos baixados são comumente referidos como "arquivos sdist" (distribuições de origem) e eu os armazenarei em um diretório $ SDIST_CACHE.
Os dois passos acabam sendo:
O qual fará o download do pacote e o colocará no diretório apontado por $ SDIST_CACHE. Não instalará o pacote. E então você corre:
Para instalar o pacote no seu ambiente virtual. Idealmente, $ SDIST_CACHE seria confirmado sob seu controle de origem. Ao implantar na produção, você executaria apenas o segundo comando pip para instalar os pacotes sem fazer o download deles.
fonte
A partir da versão 6.0 ,
pip
agora o cache é próprio:Mais informações no link acima :
fonte
O pip wheel é uma excelente opção que faz o que você deseja com o recurso extra de pré-compilar os pacotes. Dos documentos oficiais :
Agora seu
/tmp/wheelhouse
diretório tem todas as suas dependências pré-compiladas, para que você possa copiar a pasta para outro servidor e instalar tudo com este comando:Observe que nem todos os pacotes serão completamente portáteis entre as máquinas. Alguns pacotes serão criados especificamente para a versão Python, distribuição do SO e / ou arquitetura de hardware que você está usando. Isso será especificado no nome do arquivo, como
-cp27-none-linux_x86_64
para o CPython 2.7 em um Linux de 64 bits, etc.fonte
Usando apenas o pip (minha versão é 1.2.1), você também pode criar um repositório local como este:
Na primeira chamada do pip, os pacotes do arquivo de requisitos são consultados no repositório local (apenas) e depois instalados a partir daí. Se isso falhar, o pip recupera os pacotes da sua localização usual (por exemplo, PyPI) e baixa-os para o
PIP_SDIST_INDEX
(mas não instala nada!). A primeira chamada é "repetida" para instalar corretamente o pacote a partir do índice local.(
--download-cache
cria um nome de arquivo local que é a URL completa (com escape), e o pip não pode usá-lo como um índice com--find-links
.--download-cache
irá usar o arquivo em cache, se encontrado. Poderíamos adicionar essa opção à segunda chamada do pip, mas desde o índice já funciona como um tipo de cache, não traz necessariamente muito. Seria útil se seu índice fosse esvaziado, por exemplo.)fonte
Existe uma nova solução para isso, chamada pip-accel , um substituto para o
pip
cache incorporado.Vimos um aumento de cerca de 10x na mudança de
pip
parapip-accel
.fonte
Uma opção mais simples é
basket
.Dado o nome de um pacote, ele fará o download e todas as dependências para um local central; sem nenhuma das desvantagens do cache pip. Isso é ótimo para uso offline.
Você pode usar esse diretório como fonte para
pip
:Ou
easy_install
:Você também pode usá-lo para atualizar a cesta sempre que estiver online.
fonte
Eu acho que o pacote "pip-accel" deve ser uma boa escolha.
fonte