我试图从一个私有的GitHub存储库安装一个Python包。对于一个公共存储库,我可以发出以下命令,它可以正常工作:

pip install git+git://github.com/django/django.git

然而,如果我在私有存储库中尝试这样做:

pip install git+git://github.com/echweb/echweb-utils.git

我得到以下输出:

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

我想这是因为我试图在不提供任何身份验证的情况下访问私有存储库。因此,我尝试使用Git + ssh,希望pip会使用我的ssh公钥进行身份验证:

pip install git+ssh://github.com/echweb/echweb-utils.git

输出如下:

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

我想要达到的目标可能吗?如果有,我该怎么做?


当前回答

我想出了一个不需要密码提示就能自动“pip安装”GitLab私有存储库的方法。这种方法使用GitLab“部署密钥”和一个SSH配置文件,因此可以使用个人SSH密钥以外的密钥进行部署(在我的例子中,由一个“机器人”使用)。也许有人善良的灵魂可以验证使用GitHub。

新建SSH密钥:

ssh-keygen -t rsa -C "GitLab_Robot_Deploy_Key"

该文件应该显示为~/。ssh/GitLab_Robot_Deploy_Key和~/.ssh/GitLab_Robot_Deploy_Key.pub。

复制并粘贴~/.ssh/GitLab_Robot_Deploy_Key. xml文件的内容。pub文件到GitLab“部署密钥”对话框。

测试新的部署键

下面的命令告诉SSH使用新的部署密钥来建立连接。成功后,您应该会收到这样的消息:“欢迎来到GitLab, UserName!”

ssh -T -i ~/.ssh/GitLab_Robot_Deploy_Key git@gitlab.mycorp.com

2 .创建SSH配置文件

接下来,使用编辑器创建~/。ssh / config文件。添加如下内容。'Host'值可以是您想要的任何值(请记住它,因为稍后将使用它)。HostName是到GitLab实例的URL。IdentifyFile是在第一步中创建的SSH密钥文件的路径。

Host GitLab
  HostName gitlab.mycorp.com
  IdentityFile ~/.ssh/GitLab_Robot_Deploy_Key

将SSH指向配置文件

oxyum给了我们在SSH中使用pip的配方:

pip install git+ssh://git@gitlab.mycorp.com/my_name/my_repo.git

我们只需要稍微修改一下,让SSH使用我们新的部署密钥。我们通过将SSH指向SSH配置文件中的Host条目来做到这一点。只需将命令中的'gitlab.mycorp.com'替换为我们在SSH配置文件中使用的主机名:

pip install git+ssh://git@GitLab/my_name/my_repo.git

现在安装包时应该没有任何密码提示。

引用一个 引用B

其他回答

如果你想在CI服务器中安装需求文件中的依赖项,你可以这样做:

git config --global credential.helper 'cache'
echo "protocol=https
host=example.com
username=${GIT_USER}
password=${GIT_PASS}
" | git credential approve
pip install -r requirements.txt

在我的例子中,我使用GIT_USER=gitlab-ci-token和GIT_PASS=${CI_JOB_TOKEN}。

这种方法有明显的优点。您有一个包含所有依赖项的需求文件。

你可以像这样直接使用HTTPS URL:

pip install git+https://github.com/username/repo.git

这同样适用于在Django项目的requirements.txt中追加这一行。

作为一个额外的技术,如果你有本地克隆的私有存储库,你可以这样做:

pip install git+file://c:/repo/directory

更现代的,你可以这样做(-e表示你不需要在更改被反映之前提交更改):

pip install -e C:\repo\directory

我想出了一个不需要密码提示就能自动“pip安装”GitLab私有存储库的方法。这种方法使用GitLab“部署密钥”和一个SSH配置文件,因此可以使用个人SSH密钥以外的密钥进行部署(在我的例子中,由一个“机器人”使用)。也许有人善良的灵魂可以验证使用GitHub。

新建SSH密钥:

ssh-keygen -t rsa -C "GitLab_Robot_Deploy_Key"

该文件应该显示为~/。ssh/GitLab_Robot_Deploy_Key和~/.ssh/GitLab_Robot_Deploy_Key.pub。

复制并粘贴~/.ssh/GitLab_Robot_Deploy_Key. xml文件的内容。pub文件到GitLab“部署密钥”对话框。

测试新的部署键

下面的命令告诉SSH使用新的部署密钥来建立连接。成功后,您应该会收到这样的消息:“欢迎来到GitLab, UserName!”

ssh -T -i ~/.ssh/GitLab_Robot_Deploy_Key git@gitlab.mycorp.com

2 .创建SSH配置文件

接下来,使用编辑器创建~/。ssh / config文件。添加如下内容。'Host'值可以是您想要的任何值(请记住它,因为稍后将使用它)。HostName是到GitLab实例的URL。IdentifyFile是在第一步中创建的SSH密钥文件的路径。

Host GitLab
  HostName gitlab.mycorp.com
  IdentityFile ~/.ssh/GitLab_Robot_Deploy_Key

将SSH指向配置文件

oxyum给了我们在SSH中使用pip的配方:

pip install git+ssh://git@gitlab.mycorp.com/my_name/my_repo.git

我们只需要稍微修改一下,让SSH使用我们新的部署密钥。我们通过将SSH指向SSH配置文件中的Host条目来做到这一点。只需将命令中的'gitlab.mycorp.com'替换为我们在SSH配置文件中使用的主机名:

pip install git+ssh://git@GitLab/my_name/my_repo.git

现在安装包时应该没有任何密码提示。

引用一个 引用B

你也可以通过git+https://github.com/安装一个私有的存储库依赖…URL通过提供登录凭据(登录名和密码,或部署令牌)为curl的.netrc文件:

echo "machine github.com login ei-grad password mypasswordshouldbehere" > ~/.netrc
pip install "git+https://github.com/ei-grad/my_private_repo.git#egg=my_private_repo"