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.
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.
Respostas:
De acordo com a documentação do Pip :
A partir da v6.0, o pip fornece um cache ativado por padrão, que funciona de maneira semelhante à de um navegador da web. Enquanto o cache está ativado por padrão e é projetado para fazer a coisa certa por padrão, você pode desativar o cache e sempre acessar o PyPI utilizando a
--no-cache-dir
opção
Portanto, a resposta atualizada é usar apenas o pip com seus padrões, se você quiser um cache de download.
Das notícias do pip , versão 0.1.4:
Adicionado suporte para uma variável de ambiente $ PIP_DOWNLOAD_CACHE que armazenará em cache downloads de pacotes, para que futuras instalações não exijam downloads grandes. O acesso à rede ainda é necessário, mas apenas alguns downloads serão evitados ao usar isso.
Para tirar proveito disso, adicionei o seguinte ao meu ~/.bash_profile
:
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
ou, se você estiver em um Mac:
export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads
PIP_DOWNLOAD_CACHE
diretório. Por exemplo, agora tenho muitos pacotes Django.virtualenvs
no avião, mas ainda é excelente.Na minha opinião, pip2pi
é uma solução muito mais elegante e confiável para esse problema.
Dos documentos:
O pip2pi cria um repositório de pacotes compatível com PyPI a partir dos requisitos do pip
pip2pi
permite criar seu próprio índice PyPI usando dois comandos simples:
Para espelhar um pacote e todos os seus requisitos, use pip2tgz
:
$ cd /tmp/; mkdir package/
$ pip2tgz packages/ httpie==0.2
...
$ ls packages/
Pygments-1.5.tar.gz
httpie-0.2.0.tar.gz
requests-0.14.0.tar.gz
Para criar um índice de pacote a partir do diretório anterior:
$ ls packages/
bar-0.8.tar.gz
baz-0.3.tar.gz
foo-1.2.tar.gz
$ dir2pi packages/
$ find packages/
/httpie-0.2.0.tar.gz
/Pygments-1.5.tar.gz
/requests-0.14.0.tar.gz
/simple
/simple/httpie
/simple/httpie/httpie-0.2.0.tar.gz
/simple/Pygments
/simple/Pygments/Pygments-1.5.tar.gz
/simple/requests
/simple/requests/requests-0.14.0.tar.gz
Para instalar a partir do índice que você criou na etapa 2., você pode simplesmente usar:
pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
Você pode até espelhar seu próprio índice em um host remoto com pip2pi
.
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.
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
Crie um arquivo de configuração chamado ~/.pip/pip.conf
e adicione o seguinte conteúdo:
[global]
download_cache = ~/.cache/pip
No OS X, um caminho melhor para escolher seria ~/Library/Caches/pip
seguir a convenção que outros programas do OS X usam.
pip.conf
uma download_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:
pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>
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:
pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name>
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.
A partir da versão 6.0 , pip
agora o cache é próprio:
- DEPRECAÇÃO
pip install --download-cache
epip wheel --download-cache
sinalizadores de linha de comando foram preteridos e a funcionalidade removida. Como o pip agora configura e usa automaticamente seu cache HTTP interno, o que substitui as--download-cache
opções existentes que foram tornadas não funcionais, mas ainda serão aceitas até sua remoção no pip v8.0. Para obter mais informações, consulte https://pip.pypa.io/en/latest/reference/pip_install.html#caching
Mais informações no link acima :
A partir da v6.0, o pip fornece um cache ativado por padrão, que funciona de maneira semelhante à de um navegador da web. Enquanto o cache está ativado por padrão e é projetado para fazer a coisa certa por padrão, você pode desativar o cache e sempre acessar o PyPI utilizando a
--no-cache-dir
opção
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 :
Crie rodas para um requisito (e todas as suas dependências):
$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
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:
$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage
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.
Usando apenas o pip (minha versão é 1.2.1), você também pode criar um repositório local como este:
if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
pip install --download-directory="$PIP_SDIST_INDEX" <package>
pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
fi
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.)
Existe uma nova solução para isso, chamada pip-accel , um substituto para o pip
cache incorporado.
O programa pip-accel é um wrapper para o pip, o gerenciador de pacotes Python. Ele acelera o uso do pip para inicializar ambientes virtuais do Python, com um ou mais arquivos de requisitos. Isso é feito combinando as duas abordagens a seguir:
Os downloads de distribuição de origem são armazenados em cache e usados para gerar um índice local de arquivos de distribuição de origem.
Distribuições binárias são usadas para acelerar o processo de instalação de dependências com componentes binários (como M2Crypto e LXML). Em vez de recompilar essas dependências novamente para cada ambiente virtual, compilamos uma vez e armazenamos em cache o resultado como uma distribuição binária * .tar.gz.
O Paylogic usa o pip-accel para inicializar de forma rápida e confiável ambientes virtuais em seu farm de escravos de integração contínua, que estão constantemente executando testes de unidade (esse foi um dos casos de uso originais para os quais o pip-accel foi desenvolvido). Também o usamos em nossos servidores de compilação.
Vimos um aumento de cerca de 10x na mudança de pip
para pip-accel
.
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
:
pip install --no-index -f file:///path/to/basket package
Ou easy_install
:
easy_install -f ~/path/to/basket -H None package
Você também pode usá-lo para atualizar a cesta sempre que estiver online.