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.gz
instalei o ansible com sucesso.
Agora minha pergunta é. Existe uma maneira de pip
usar 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
pip
usar 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 install
da 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 ansible
o 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.txt
para 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 install
documentação, que oferece exemplos de combinação pip install
com links VCS (ou seja, Git, Mercurial, Subversion e Bazaar).
Referências
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>