【问题标题】:pip install always clones git repos even if package is already installed即使软件包已经安装, pip install 总是克隆 git repos
【发布时间】:2016-04-19 17:42:06
【问题描述】:

有没有办法让pip检查git指定的包是否已经安装并完全跳过git克隆?

文档中提到可以在egg定义之后指定版本,但这只是为了用户的视觉方便,并没有在任何地方使用。

【问题讨论】:

  • 我也在寻找这个问题的答案。自从您最初提出这个问题以来,您找到答案了吗?
  • pip 8 只会检查 git repo 是否已缓存,因此它不会再次拉取它,但我的问题是如果包已经存在,则根本不使用 git。

标签: git version-control pip


【解决方案1】:

对于我的用例,解决方案是从表单中更改 URL:

git+https://example.com/project.git@v5.5#egg=project-5.5

到此(去掉最终版本号):

git+https://example.com/project.git@v5.5#egg=project

一旦我这样做了,我可以重复运行 pip install 命令,它只会在第一次克隆存储库。

【讨论】:

    【解决方案2】:

    来自Martijn Pieters'回复Caching remote repository for pip installs

    您可以将 pip 安装的结果缓存为 Python Wheel:

    pip wheel --wheel-dir=/tmp/wheelhouse git+https://example.com/project.git#egg=project
    

    这将为 /tmp/wheelhouse 中的存储库构建一个轮子。你可以 然后重新使用操舵室进​​行后续安装:

    pip install --use-wheel --no-index --find-links=/tmp/wheelhouse project
    

    但是,车轮不会从存储库中更新。

    这适用于纯 python 存储库。如果您需要的存储库与它构建的 C 库挂钩(比如某种 NumPy 或 TensorFlow 扩展),您可以尝试

    pip download -d /tmp/pip_packages git+https://example.com/project.git#egg=project
    

    然后进行安装

    pip install --find-links /tmp/pip_packages project
    

    如果这仍然不起作用,则可能是最后的手段

    git clone --depth=1 https://example.com/project.git ./project
    pip install -e project
    

    【讨论】:

      【解决方案3】:

      万一像我这样的菜鸟也面临这个问题,由于 URL 中的 egg 名称不正确,也可能会重新克隆和重新构建包。

      具体来说,如果您的项目名为project_name,pip 会将包(和蛋)命名为project-name,在构建过程中将下划线替换为连字符。因此,您可能需要将 URL 更改为

      git+https://example.com/project_name.git#egg=project_name
      

      git+https://example.com/project_name.git#egg=project-name
      

      查看pip install ... 的输出将告诉您正在创建和使用的包名称。

      【讨论】:

        猜你喜欢
        • 2020-04-25
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-31
        • 1970-01-01
        相关资源
        最近更新 更多