正如标题所示,我试图从私有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
有谁知道我想要达到的目标是否可能?如果是这样,请告诉我怎么做?
答案 0 :(得分:294)
您可以使用git+ssh
URI方案,但必须设置用户名:
pip install git+ssh://git@github.com/echweb/echweb-utils.git
将 git@
部分纳入URI?
PS:另请阅读deploy keys。
PPS:在我的安装中,“git + ssh”URI方案仅适用于“可编辑”要求:
pip install -e URI#egg=EggName
记住:在使用:
命令中的远程地址之前,将git remote -v
打印的/
字符更改为pip
字符:< / p>
$ 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
答案 1 :(得分:64)
作为一种额外的技术,如果您在本地克隆了私有存储库,则可以执行以下操作:
pip install git+file://c:/repo/directory
编辑:更现代化,您可以这样做(-e
意味着您不必在反映之前提交更改):
pip install -e C:\repo\directory
答案 2 :(得分:45)
您可以使用HTTPS URL直接执行此操作:
pip install git+https://github.com/username/repo.git
例如,这也只是在django项目的requirements.txt中附加该行。
答案 3 :(得分:24)
也适用于Bitbucket:
pip install git+ssh://git@bitbucket.org/username/projectname.git
在这种情况下,Pip将使用您的SSH密钥。
答案 4 :(得分:14)
需求文件的语法如下:
https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format
例如:
-e git+http://github.com/rwillmer/django-behave#egg=django-behave
如果您希望源安装后留下来
或只是
git+http://github.com/rwillmer/django-behave#egg=django-behave
如果您只是想安装它。
答案 5 :(得分:11)
我找到了一种自动化的方法来安装&#39;一个不需要密码提示的GitLab私有存储库。这种方法使用GitLab&#34; Deploy Keys&#34;和SSH配置文件,以便您可以使用除个人SSH密钥之外的密钥进行部署(在我的情况下,供机器人使用)。也许某个善良的灵魂可以使用GitHub验证。
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.pub
文件的内容复制并粘贴到GitLab&#34;部署密钥&#34;对话框。
以下命令告诉SSH使用新的部署密钥来设置连接。成功之后,您应该收到消息:&#34;欢迎使用GitLab,用户名!&#34;
ssh -T -i ~/.ssh/GitLab_Robot_Deploy_Key git@gitlab.mycorp.com
接下来,使用编辑器创建~/.ssh/config
文件。添加以下内容。主持人&#39;价值可以是你想要的任何东西(只记得它,因为你以后会用它)。 HostName是GitLab实例的URL。 IdentifyFile是您在第一步中创建的SSH密钥文件的路径。
Host GitLab
HostName gitlab.mycorp.com
IdentityFile ~/.ssh/GitLab_Robot_Deploy_Key
@oxyum向我们提供了使用pip和SSH的方法:
pip install git+ssh://git@gitlab.mycorp.com/my_name/my_repo.git
我们只需稍微修改它以使SSH使用我们新的Deploy Key。我们通过将SSH指向SSH配置文件中的Host条目来实现。只需更换&#39; gitlab.mycorp.com&#39;在我们在SSH配置文件中使用的主机名的命令中:
pip install git+ssh://git@GitLab/my_name/my_repo.git
现在应该在没有密码提示的情况下安装软件包。
答案 6 :(得分:11)
我发现使用令牌比使用SSH密钥更容易。我在这方面找不到很好的文档,所以主要通过试用和解决方案来解决这个问题。错误。此外,从pip&amp; amp; setuptools有一些微妙的差异;但这种方式应该适用于两者。
GitHub(目前,截至2016年8月)提供了一种简单的方法来获取私人回购的zip / tarball。所以你需要指向setuptools告诉setuptools你指向一个git repo:
from setuptools import setup
import os
# get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/
github_token = os.environ['GITHUB_TOKEN']
setup(
# ...
install_requires='package',
dependency_links = [
'git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0'
.format(github_token=github_token, package=package, version=master)
]
这里有几点说明:
0
),即使PyPI上没有包。这必须是一个实际的数字,而不是一个字。git+
前面告诉setuptools克隆回购,而不是指向zip / tarball version
可以是分支,标记或提交哈希--process-dependency-links
答案 7 :(得分:7)
当我从github安装时,我可以使用:
pip install git+ssh://git@github.com/<username>/<projectname>.git#egg=<eggname>
但是,因为我必须以sudo
运行pip,所以SSH密钥不再使用github,“git clone”在“Permission denied(publickey)”上失败。使用git+https
允许我以sudo的身份运行命令,让github问我用户/密码。
sudo pip install git+https://github.com/<username>/<projectname>.git#egg=<eggname>
答案 8 :(得分:5)
您还可以通过git+https://github.com/... URL为curl提供的登录凭据(登录名和密码或部署令牌),通过{{3}} URL安装私人仓库依赖项:
.netrc
答案 9 :(得分:3)
例如,如果您需要在命令行单行代码中执行此操作,则也可以。我能够在Google Colab上进行部署:
pip install git+https://<PERSONAL ACCESS TOKEN>@github.com/<USERNAME>/<REPOSITORY>.git
答案 10 :(得分:1)
如果要从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}
。
此方法有一个明显的优势,您只有一个包含所有依赖项的需求文件。
答案 11 :(得分:0)
答案 12 :(得分:0)
你可以尝试
pip install git+git@gitlab.mycorp.com/my_name/my_repo.git
没有ssh:......那对我有用。
答案 13 :(得分:0)
如果您在github / gitlab等上有自己的库/数据包,则必须添加标记以提交具体版本的库,例如v2.0然后你可以安装你的数据包
pip install git+ssh://link/name/repo.git@v2.0
这对我有用。其他解决方案对我没用。
答案 14 :(得分:0)
如果不想使用ssh,则可以在https url中添加用户名和密码。
下面的代码假定您在工作目录中有一个包含密码的名为“ pass”的文件。
export PASS=$(cat pass)
pip install git+https://<username>:$PASS@github.com/echweb/echweb-utils.git
答案 15 :(得分:0)
只需从原始git clone
命令(或从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
答案 16 :(得分:0)
这是一种对我有用的快速方法。只需分叉存储库并使用
从您自己的GitHub帐户安装它pip install git+https://github.com/yourName/repoName
答案 17 :(得分:0)
我的案例比答案中描述的大多数案例都要复杂。我是 Github 组织中两个私有存储库 repo-A
和 repo-B
的所有者,并且需要在 pip install repo-A
、{{3} 的 python
单元测试期间repo-B
}.
我为解决此任务而遵循的步骤:
repo-B
下创建了一个 Personal Access Token,将我的个人访问令牌粘贴到其中并将其命名为 PERSONAL_ACCESS_TOKEN
。 这很重要,因为与 repository secret 提出的解决方案不同,我不需要在 github 操作 .yml
文件中明确公开我宝贵的原始个人访问令牌。立>
pip install
通过 HTTPS 从源代码编写了包,如下所示 export PERSONAL_ACCESS_TOKEN=${{ secrets.PERSONAL_ACCESS_TOKEN }} && pip install git+https://${PERSONAL_ACCESS_TOKEN}@github.com/MY_ORG_NAME/MY_REPO_NAME.git