Estou tentando instalar um pacote Python a partir de um repositório GitHub privado. Para um repositório público, posso emitir o seguinte comando que funciona bem:
pip install git+git://github.com/django/django.git
No entanto, se eu tentar isso para um repositório privado:
pip install git+git://github.com/echweb/echweb-utils.git
Eu recebo a seguinte saída:
Downloading/unpacking git+git://github.com/echweb/echweb-utils.git
Cloning Git repository git://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build
Complete output from command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build:
fatal: The remote end hung up unexpectedly
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build...
----------------------------------------
Command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build failed with error code 128
Acho que é porque estou tentando acessar um repositório privado sem fornecer nenhuma autenticação. Portanto, tentei usar o Git + ssh
esperando que o pip usasse minha chave pública SSH para autenticar:
pip install git+ssh://github.com/echweb/echweb-utils.git
Isso fornece a seguinte saída:
Downloading/unpacking git+ssh://github.com/echweb/echweb-utils.git
Cloning Git repository ssh://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build
Complete output from command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build:
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
----------------------------------------
Command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build failed with error code 128
O que estou tentando alcançar é possível? Se sim, como posso fazer isso?
eval $(ssh-agent); ssh-add ~/.ssh/github_id_rsa
e, em seguida, pip executar instala seguinte pip.pypa.io/en/stable/reference/pip_install/#gitRespostas:
Você pode usar o
git+ssh
esquema de URI, mas deve definir um nome de usuário:Você vê a
git@
parte no URI?PS: Leia também sobre as chaves de implantação .
PPS: Na minha instalação, o esquema de URI "git + ssh" funciona apenas com os requisitos "editáveis":
Lembre - se : Altere o
:
caractere que égit remote -v
impresso em um/
caractere antes de usar o endereço do controle remoto nopip
comando:Se você esquecer, você receberá este erro:
fonte
git+ssh://[email protected]/echweb/echweb-utils.git
esquema correto no meu arquivo de requisitos. Abri uma nova pergunta aqui: stackoverflow.com/questions/18883430/… . Qualquer ajuda seria ótimo.git+ssh://[email protected]/echweb/echweb-utils.git
emrequirements.txt
trabalhos também, o que é incrível.pip install git+ssh://[email protected]/echweb/echweb-utils.git@branch-name
Como uma técnica adicional, se você tiver o repositório privado clonado localmente, poderá:
De maneira mais moderna, você pode fazer isso (e
-e
isso significa que você não precisa confirmar as alterações antes que elas reflitam):fonte
Você pode fazer isso diretamente com a URL HTTPS desta forma:
Isso também funciona apenas acrescentando essa linha no requirements.txt em um projeto Django , por exemplo.
fonte
Também funciona com o Bitbucket :
Pip usará suas chaves SSH neste caso.
fonte
A sintaxe para o arquivo de requisitos é fornecida aqui:
https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format
Então, por exemplo, use:
se você quiser que a fonte permaneça após a instalação.
Ou apenas
se você apenas deseja que ele seja instalado.
fonte
Achei muito mais fácil usar tokens do que chaves SSH. Como não encontrei muita documentação boa sobre isso, encontrei essa solução principalmente por tentativa e erro. Além disso, a instalação do pip e setuptools possui algumas diferenças sutis; mas dessa maneira deve funcionar para ambos.
O GitHub (atualmente, a partir de agosto de 2016) não oferece uma maneira fácil de obter o zip / tarball de repositórios privados. Então, você precisa apontar setuptools para dizer ao setuptools que você está apontando para um repositório Git:
Algumas notas aqui:
0
) no final do link, mesmo se não houver nenhum pacote no PyPI . Este deve ser um número real, não uma palavra.git+
usar o prefácio para dizer ao setuptools que é para clonar o repositório, em vez de apontar para um zip / tarballversion
pode ser uma ramificação, uma tag ou um hash de confirmação--process-dependency-links
se estiver instalando a partir do pipfonte
setup.py
não deve conter dependências concretas, apenas abstratas. Isso está especificando uma dependência concretasetup.py
.Eu descobri uma maneira de instalar automaticamente o pip de um repositório privado do GitLab que não requer prompt de senha. Essa abordagem usa o GitLab "Deploy Keys" e um arquivo de configuração SSH, para que você possa implantar usando outras chaves além das suas chaves SSH pessoais (no meu caso, para uso por um 'bot). Talvez alguém que seja gentil pode verificar usando o GitHub.
Crie uma nova chave SSH:
O arquivo deve aparecer como
~/.ssh/GitLab_Robot_Deploy_Key
e~/.ssh/GitLab_Robot_Deploy_Key.pub
.Copie e cole o conteúdo do
~/.ssh/GitLab_Robot_Deploy_Key.pub
arquivo na caixa de diálogo "Deploy Keys" do GitLab.Teste a nova chave de implantação
O comando a seguir diz ao SSH para usar sua nova chave de implantação para configurar a conexão. Com sucesso, você deverá receber a mensagem: "Bem-vindo ao GitLab, UserName!"
Crie o arquivo de configuração SSH
Em seguida, use um editor para criar um
~/.ssh/config
arquivo. Adicione o seguinte conteúdo. O valor 'Host' pode ser o que você quiser (lembre-se, porque você o usará mais tarde). O HostName é o URL da sua instância do GitLab. O IdentifyFile é o caminho para o arquivo de chave SSH que você criou na primeira etapa.Aponte SSH para o arquivo de configuração
oxyum nos deu a receita para usar pip com SSH:
Só precisamos modificá-lo um pouco para que o SSH use nossa nova chave de implantação. Fazemos isso apontando SSH para a entrada Host no arquivo de configuração SSH. Apenas substitua 'gitlab.mycorp.com' no comando pelo nome do host que usamos no arquivo de configuração SSH:
O pacote agora deve ser instalado sem nenhum prompt de senha.
Referência A
Referência B
fonte
Quando estava instalando no GitHub, pude usar:
Mas, como eu tive que executar o pip as
sudo
, as chaves SSH não estavam mais funcionando com o GitHub e o "git clone" falhou em "Permission denied (publickey)". Usargit+https
me permitiu executar o comando como sudo e o GitHub me pediu meu usuário / senha.fonte
Você também pode instalar uma dependência de repositório particular via git + https: //github.com / ... URL, fornecendo credenciais de login (login e senha ou implantar token) para se curvar com o
.netrc
arquivo:fonte
Se você deseja instalar dependências a partir de um arquivo de requisitos em um servidor de IC ou similar, pode fazer o seguinte:
No meu caso, eu usei
GIT_USER=gitlab-ci-token
eGIT_PASS=${CI_JOB_TOKEN}
.Este método tem uma clara vantagem. Você tem um único arquivo de requisitos que contém todas as suas dependências.
fonte
Se você não quiser usar o SSH, poderá adicionar o nome de usuário e a senha no URL HTTPS.
O código abaixo pressupõe que você tenha um arquivo chamado "pass" no diretório ativo que contém sua senha.
fonte
a solução da oxyum está correta para esta resposta. Eu só quero ressaltar que você precisa ter cuidado se estiver instalando usando
sudo
as chaves, pois elas também devem ser armazenadas para root (por exemplo/root/.ssh
).Então você pode digitar
fonte
--user
bandeira ou um virtualenv.Se você possui sua própria biblioteca / pacote no GitHub, GitLab, etc., é necessário adicionar uma tag para confirmar com uma versão concreta da biblioteca, por exemplo, v2.0, e então você pode instalar o seu pacote:
Isso funciona para mim. Outras soluções não funcionaram para mim.
fonte
Aqui está um método rápido que funcionou para mim. Simplesmente bifurque o repositório e instale-o a partir da sua própria conta GitHub com
fonte
Basta copiar o controle remoto do
git clone
comando original (ou degit remote -v
). Você obterá algo como isto:Bitbucket:
git+ssh://[email protected]:your_account/my_pro.git
GitHub:
git+ssh://[email protected]:your_account/my_pro.git
Em seguida, você precisa substituir
:
por/
próximo ao nome de domínio.Então instale usando:
fonte
Você pode tentar
sem
ssh:...
. Isso funciona para mim.fonte