【问题标题】:How to include a git repo as a dependency when using pbr使用 pbr 时如何将 git repo 作为依赖项包含在内
【发布时间】:2018-03-02 17:18:06
【问题描述】:

我正在使用pbr,它使用requirements.txt 文件来查找依赖项。

我在requirements.txt 中有一条线,比如git+ssh://git@github.com/user/repo.git,它在我运行pip install -r requirements.txt 时有效

但是,当我运行 python setup.py build 时,我遇到了错误:

error in setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Invalid requirement, parse error at "'+ssh://g'"

many Stack Overflow answers在使用setuptools时专门处理这个问题,他们都建议将Git依赖项放入setup.py中的dependency_links列表中。

我希望 pbr 能够以在我同时运行 python setup.py buildpip install -r requirements.txt 时有效的方式直接从 requirements.txt 处理我的 Git 依赖项。

这可能吗?有什么解决办法吗?

【问题讨论】:

    标签: python git python-pbr


    【解决方案1】:

    在您提供的示例中,pbr 将整行传播到 install_requires,这会产生无效行。

    通过#egg=name 提供需求名称

    要使其按预期工作,该 url 需要一个 #egg 后缀来告诉 pbr 该 URL 提供了什么要求。如果 URL 看起来像这样,pbr 将 scrape a requirement 超出 #egg 部分并仅将 repo 传播到 install_requires

    git+ssh://git@github.com/user/repo.git#egg=repo
    

    版本限制

    如果包含一个版本,pbr will add 对它有一个>= 约束。所以这将变成repo>=1.2.3 in install_requires:

    git+ssh://git@github.com/user/repo.git#egg=repo-1.2.3
    

    依赖链接

    extract a dependency_link item 也会包含完整的 URL。您可以通过将--process-dependency-links 传递给 pip 来使用它。默认情况下,pip 将返回错误Could not find a version that satisfies the requirement repo,除非该包也可以通过 PyPI 获得。如果指定了--process-dependency-links,那么它将改为从 Git URL 获取它。

    使用 -e 标志,或要求 pbr>=1.9.0

    在 1.9.0 版之前,pbr 仅识别 httphttps URL,除非行以 -e 开头。它增加了对git://git+ssh://git+https:// 的支持,而this commit 中没有-e

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-26
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多