我试图从一个私有的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

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


当前回答

当我从GitHub安装时,我能够使用:

pip install git+ssh://git@github.com/<username>/<projectname>.git#egg=<eggname>

但是,由于我必须作为sudo运行pip, SSH密钥不再与GitHub一起工作,并且“git克隆”在“权限被拒绝(publickey)”上失败。使用git+https允许我以sudo的方式运行命令,并让GitHub询问我的用户名/密码。

sudo pip install git+https://github.com/<username>/<projectname>.git#egg=<eggname>

其他回答

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

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

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

pip install -e C:\repo\directory

我的情况比答案中描述的大多数情况都要复杂。我是Github组织中两个私有存储库repo_A和repo_B的所有者,需要在repo_B的python单元测试期间pip安装repo_A,作为Github操作。

我解决这个问题的步骤是:

Created a Personal Access Token for my account. As for its permissions, I only needed to keep the default ones, .i.e. repo - Full control of private repositories. Created a repository secret under repo_B, pasted my Personal Access Token in there and named it PERSONAL_ACCESS_TOKEN. This was important because, unlike the solution proposed by Jamie, I didn't need to explicitly expose my precious raw Personal Access Token inside the github action .yml file. Finally, pip install the package from source via HTTPS (not SSH) as follows:

export PERSONAL_ACCESS_TOKEN=${{ secrets.PERSONAL_ACCESS_TOKEN }}

pip install git+https://${PERSONAL_ACCESS_TOKEN}@github.com/MY_ORG_NAME/repo_A.git

当我从GitHub安装时,我能够使用:

pip install git+ssh://git@github.com/<username>/<projectname>.git#egg=<eggname>

但是,由于我必须作为sudo运行pip, SSH密钥不再与GitHub一起工作,并且“git克隆”在“权限被拒绝(publickey)”上失败。使用git+https允许我以sudo的方式运行命令,并让GitHub询问我的用户名/密码。

sudo pip install git+https://github.com/<username>/<projectname>.git#egg=<eggname>

你可以试试

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

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

只需从原始的git克隆命令(或从git remote -v)复制远程。你会得到这样的结果:

Bitbucket都:git + ssh: / / git@bitbucket.org: your_account / my_pro.git GitHub: git + ssh: / / git@github.com: your_account / my_pro.git

接下来,您需要将域名旁边的:替换为/。

安装时使用:

pip install git+ssh://git@bitbucket.org/your_account/my_pro.git