我试图从一个私有的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 install git+git@gitlab.mycorp.com/my_name/my_repo.git

没有ssh:…这对我很有用。

其他回答

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

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

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

如果不想使用SSH,可以在HTTPS URL中添加用户名和密码。

下面的代码假设在工作目录中有一个名为“pass”的文件,其中包含您的密码。

export PASS=$(cat pass)
pip install git+https://<username>:$PASS@github.com/echweb/echweb-utils.git

你可以试试

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

没有ssh:…这对我很有用。

如果你在GitHub, GitLab等上有自己的库/包,你必须添加一个标签来提交一个具体版本的库,例如v2.0,然后你可以安装你的包:

pip install git+ssh://link/name/repo.git@v2.0

这对我很有用。其他的解决方案对我都不起作用。

可以使用git+ssh的URI方案,但必须设置用户名。注意URI中的git@部分:

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

还可以阅读部署键。

PS:在我的安装中,“git+ssh”URI方案只适用于“可编辑”的要求:

pip install -e URI#egg=EggName

记住:在pip命令中使用远程地址之前,将git remote -v打印的:字符更改为/字符:

$ git remote -v
origin  git@github.com:echweb/echweb-utils.git (fetch)
#                     ^ change this to a '/' character

如果你忘记了,你会得到这个错误:

ssh: Could not resolve hostname github.com:echweb:
         nodename nor servname provided, or not known