来自私人 github 存储库的 Pip install wheel

Posted

技术标签:

【中文标题】来自私人 github 存储库的 Pip install wheel【英文标题】:Pip install wheel from private github repo 【发布时间】:2020-01-21 19:03:54 【问题描述】:

我们有一个包含 Python 项目的私有存储库,该项目由 setuptools 在 CI/CD 服务器上构建,然后将***工件作为版本推送回 Github。这个过程效果很好,但是将生成的***返回到需要它作为依赖项的其他构建过程中似乎并不容易。

我们最初的过程是使用 git 子模块,但是***格式更好地自包含,并且使用项目不必担心相对路径,因为***直接安装到站点包中。

在任何消耗性项目中拉动和安装***是最大的问题。将***的 url 添加到 requirements.txt 会得到 pip 尝试拉***,但随后失败并显示以下内容:

Could not install requirement <ProjectName>==2.0 from
https://github.com/<CompanyName>/<ProjectName>/releases/download/v2.0.0/<ProjectName>-2.0-py3-none-any.whl (from -r 
requirements.txt (line 27)) because of HTTP error 404 Client Error: Not Found for url 

如果在私人浏览器窗口中跟随 url,也会返回 404 错误。如果在已经登录到 GitHub 的浏览器上跟随 url,则返回***。检查获得***的请求显示浏览器发送了一个 cookie,让 GitHub 知道这个***属于我,但以编程方式发送 cookie 似乎不是一个好主意。

以下问题都涉及同一主题。第一个问题的公认答案似乎不是很优雅——希望在某个地方有更好的方法!

How do I download binary files of a GitHub release?

pip install wheel version from private github repo

谢谢

斯图尔特

【问题讨论】:

您必须对拉取进行身份验证。 谢谢@dan1st。看起来 pip 允许身份验证的唯一方法是来自 user:pass (github.com/pypa/pip/issues/51)。还看了pip源码看看有没有token认证的后门,貌似没有。 在任何情况下,您都可以使用 PAT 代替密码。 嗯,我什至尝试了 curl,但没有成功:curl -H "Authorization: token ####" https://github.com/&lt;CompanyName&gt;/&lt;ProjectName&gt;/releases/download/v2.0.0/&lt;ProjectName&gt;-2.0-py3-none-any.whl 这不是通过 API,而是直接到工件下载链接 我也有这个问题,到目前为止没有任何建议可行。有新想法的人吗?我创建了一个 PAT,但没有看到 repo:private perms 的选项,仅适用于公共。使用 PAT,我可以 说服 pip 下载源代码,但 不能 将其下载到***上。我已经在浏览器中测试了滚轮 URL 是否正确。这有效:pip install git+https://$GITHUB_PAT@github.com/&lt;ORG_NAME&gt;/&lt;REPO_NAME&gt;.git@v0.1.0 但这不起作用:pip install https://$GITHUB_PAT@github.com/&lt;ORG_NAME&gt;/&lt;REPO_NAME&gt;/releases/download/v0.1.0/&lt;PACKAGE_NAME&gt;-0.1.0-py2.py3-none-any.whl 【参考方案1】:

有一种使用 GitHub 访问令牌对拉取进行身份验证的便捷方法,该令牌将在许多使用 HTTP 的不同工具中非常透明地运行。这是大多数系统上的 ~/.netrc 文件。请尝试以下操作:

$ touch ~/.netrc && chmod 600 ~/.netrc && cat >> ~/.netrc << 'EOF'
machine github.com
login your_githubu_sername
password your_github_api_token
EOF

我上次检查时,curlwgetgit(以及其他)默认情况下会尊重此文件来验证 HTTP(S) 请求。虽然我不确定每种配置都是这种情况,但您可能会惊讶于对~/.netrc 的支持在不同工具中的普遍存在。这是一个 Unixsm,我不知道 MacOS 或 Windows 是否支持它,但大多数 Linux 发行版的工具都支持它

【讨论】:

以上是关于来自私人 github 存储库的 Pip install wheel的主要内容,如果未能解决你的问题,请参考以下文章

Github - 分叉一个私人仓库

使用来自 GitHub 存储库的更改更新本地存储库

尝试发布到包时,Github Actions 工作流(私人仓库)挂起

Git相关内容

github存储库的本地缓存?

Github 操作无法从 Github 包存储库下载工件