【问题标题】:Can I force pip to make a shallow checkout when installing from git?从 git 安装时,我可以强制 pip 进行浅层结帐吗?
【发布时间】:2019-03-30 01:34:55
【问题描述】:

以下命令从 git 存储库安装 Python 包:

$ pip install git+ssh://git@github.com/username/repo.git
Collecting git+ssh://git@github.com/username/repo.git
  Cloning ssh://git@github.com/username/repo.git to /tmp/pip-req-build-8s4nci15

我不是 100% 确定,但由于它需要很长时间,我猜它会克隆每个提交。但是要安装,我只需要最新的。

相反,我想要一个浅克隆(带有--depth 1)。这可能吗?

【问题讨论】:

  • 耗时的不是项目及其文件夹的结构,而是提交的数量。您还可以选择使用 .zip URL 来下载 repo。
  • 嗯...我该如何为私有存储库做到这一点?它使用上述解决方案通过 SSH 密钥工作。 zip文件有类似的东西吗?
  • 您可以尝试使用私有访问令牌:https://username:token@github… 或不使用用户名。
  • @MartinThoma,这可能取决于档案的托管位置。您是在专门谈论 GitHub 吗?您能否简要描述一下您的托管环境(例如,它是一个 VPS,您使用的是 Heroku 之类的东西等)吗?可能像Gemfury 这样的帮助?

标签: python git pip


【解决方案1】:

--depth 1 添加到git clone 命令具有been discussed at length,并且暂时被pip 的维护者拒绝。它似乎是一个more complex issue than one might expect,特别是因为它会破坏广泛使用的setuptools_scm

正如克劳斯在 cmets 中所说,你 can avoid the overhead of git clone by pointing to a remote archive file 而不是使用 Git URL:

pip install http://my.package.repo/SomePackage-1.0.4.zip

【讨论】:

  • 嗯...阅读链接的线程。我想我遗漏了一些东西,因为从表面上看,PIP 维护者似乎在竭尽全力避免找到可行的妥协方案,而 IMO 可能会严重影响他们的既定目标......
  • 我没有参与决策,也没有足够的背景信息,但我同意可能有一个好的解决方案。目前看来pip 中还没有实现。
【解决方案2】:

除了取决于主机可能可用的变通办法(如 ZIP)外,通用 git 变通办法是预先创建浅层克隆,然后(因为你的克隆本身就是一个 git repo)点PIP 到克隆。

这并不理想(因此是“解决方法”),因为对于自动化案例,您必须在调用 PIP 之前编写创建浅克隆的脚本,并且您提供给 PIP 的数据将列出克隆的 URL,而不是相应包的规范 URL。

此外,由于 PIP 'depth=1' 辩论中提到的原因,它可能最终对您不起作用,具体取决于您(或您的依赖项)使用的工具。似乎git describe 是问题的症结所在(或者至少是一个常见问题的症结所在);因此,您也许可以在本地保存的一个提交上添加标签作为进一步的解决方法。

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 2015-05-18
    • 2015-03-21
    • 2012-08-03
    • 2011-08-04
    • 2020-10-10
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多