Como instalar pacotes python com todas as dependências offline via pip3?

Como instalar pacotes python com todas as dependências offline via pip3?

antes de mais nada consegui instalar o Ansible em um servidor que não tem acesso à internet. Mas me pergunto se minha abordagem está correta.

A princípio baixei as dependências necessárias via pip3.

pip3 download ansible -d .

Isso resultou no download dos seguintes arquivos:

ansible-2.9.4.tar.gz                          
cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl  
MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl  
PyYAML-5.3.tar.gz
cffi-1.13.2-cp36-cp36m-manylinux1_x86_64.whl  
Jinja2-2.11.1-py2.py3-none-any.whl                
pycparser-2.19.tar.gz                              
six-1.14.0-py2.py3-none-any.whl

Agora que disponibilizei esses arquivos em meu computador remoto, tentei usar

pip3 install ansible-2.9.4.tar.gz

para instalar o ansible.

Isso resultou no seguinte erro:

Processing ./ansible-2.9.4.tar.gz
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 
'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7f00726f9ef0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /simple/jinja2/

Então tentei instalar o Jinja2 manualmente:

pip3 install jinja2-2.11.1-py2.py3-none-any.whl

Mas isso também não funcionou:

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection
 broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7fd303a23940>: Failed to establish a new connection: [Errno -2] Name or service not known',)': 
/simple/markupsafe/

Depois que o Markupsafe foi instalado, o Jinja2 também pôde ser instalado. No final, pip3 install ansible-2.9.4.tar.gzinstalei o ansible com sucesso.

Agora minha pergunta é. Existe uma maneira de pipusar os arquivos baixados para instalar as dependências ou existe uma abordagem mais fácil para instalar um pacote python específico com todas as suas dependências offline?

Obrigado pela sua ajuda e cumprimentos. tagarelar

Responder1

Existe uma maneira de pipusar os arquivos baixados para instalar as dependências ou existe uma abordagem mais fácil para instalar um pacote python específico com todas as suas dependências offline?

Acredito que o que você está procurando é o--sem índicee--encontrar linksopções para pip install. De acordo com a documentação oficial pip installda opção:

--sem índice

Ignore o índice do pacote (em vez disso, observe apenas os URLs --find-links).

-f, --encontrar links

Se for um URL ou caminho para um arquivo html, analise os links para arquivos. Se um caminho local ou url file:// for um diretório, procure por arquivos na listagem de diretórios.

Com essas opções você pode fazer ex. instalação local:

pip3 install --no-index --find-links /some/path <package name>

ou instalação remota (por exemplo, via HTTP):

pip3 install --no-index --find-links http:\\remotes\server <package name>

No seu caso, você deve poder simplesmente usar ansibleo nome do pacote, por exemplo:

pip3 install --no-index --find-links /some/path ansible

pip3 install --no-index --find-links http:\\remotes\server ansible

Embora o nome completo do arquivo possa ser usado se desejar:

pip3 install --no-index --find-links /some/path ansible-2.9.4.tar.gz

pip3 install --no-index --find-links http:\\remotes\server ansible-2.9.4.tar.gz

Supondo que todas as dependências necessárias residam no mesmo local (conforme listado na sua pergunta original), elas devem ser instaladas normalmente (ou seja, sem a necessidade de instalar manualmente cada dependência em ordem).


Requisitos

Outra opção pode ser criar um arquivo de requisitos com a ordem de instalação de dependência adequada, por exemplo:

ex. requisitos.txt

/path/to/MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
/path/to/Jinja2-2.11.1-py2.py3-none-any.whl 
/path/to/ansible-2.9.4.tar.gz
# ...                          

Então use, por exemplo, pip3 install -r requirements.txtpara instalar os pacotes listados. Você também pode usar, por exemplo, links HTTP novamente:

ex. requisitos.txt

http:\\remotes\server\MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
http:\\remotes\server\Jinja2-2.11.1-py2.py3-none-any.whl 
http:\\remotes\server\ansible-2.9.4.tar.gz
# ... 

A clara desvantagem aqui é que, assumindo que um pacote depende de outro, você já precisa saber a ordem em que determinados pacotes precisam ser instalados.


Outras opções de URL

Você também pode querer dar uma olhada noseção do sistema de controle de versão (VCS)de pip installdocumentação, que oferece exemplos de combinação pip installcom links VCS (ou seja, Git, Mercurial, Subversion e Bazaar).


Referências

instalação do pip

instalação pip (opções)

Responder2

Como você não precisa de um espelho completo, sugiro usarespelho python-pypi:

1- Instale python-pypi-mirror usando pip em um servidor com conexão à internet.

2- Instale o módulo http.server python neste servidor.

3- Crie um diretório que servirá seus pacotes pip.

4- Baixe os pacotes necessários usando python-pypi-mirror para o diretório recentemente criado e exposto como um servidor http (conterá todas as suas dependências).

5- Instale o pacote necessário remotamente.

 pip3 install --trusted-host <http_server> -i http://<http_server>:<http.server_default_port>/simple <package_name>

Você encontrará todas as instruções necessárias aqui

informação relacionada