【问题标题】:How to add a package-specific index-url to requirements.txt?如何将特定于包的 index-url 添加到 requirements.txt?
【发布时间】:2019-07-15 16:02:11
【问题描述】:

我想向我的requirements.txt 添加一个与命令行对应的包

pip3 install foo --index-url https://foo.com/bar/baz

附加

--index-url https://foo.com/bar/baz
foo

requirements.txt结束,希望index-url 选项只会影响后面的内容。它似乎有效(至少只要我在可以看到 foo.com 的 VPN 上)。

这是正确的方法吗? 谢谢。

【问题讨论】:

  • pip install -r requirements.txt 实际上与 cat requirements.txt | xargs pip install 相同,因此在您的情况下,自定义索引 arg 将应用于所有包。
  • 可能更像grep -v '^#' requirements.txt | xargs pip install 但我明白你的意思。谢谢。您知道人们如何处理来自不同来源的需求问题吗?
  • 我会说这取决于您的用例。如果您的用例是从私有索引下载依赖项的选择,从 PyPI 中休息,因为私有 deps 未上传到 PyPI,请将 --index-url 替换为 --extra-index-url 所以 pip 首先尝试从 PyPI 下载并在失败时求助于私有索引。
  • 如果您的用例是例如防止 pip 从 PyPI 下载包以防止包欺骗,那么您将无法通过标志在本地解决它,需要相应地配置私有索引。我会例如推荐devpi,因为它默认开启了包欺骗预防,并将--index-url指向你的私有索引,所以它可以自行决定是否将下载请求代理到PyPI。

标签: python python-3.x pip


【解决方案1】:

requirements.txt 中的参数适用于所有包;命令

$ pip install -r requirements.txt

requirements.txt 存在

foo
bar>1
baz==2
--flag

实际上与跑步相同

$ pip install "foo" "bar>1" "baz==2" --flag

如果您只想从您的私有索引中下载部分依赖项,请使用--extra-index-url 而不是--index-url。这将指示 pip 从 PyPI 下载包(如果可用),否则使用您的私有索引(也支持多个 --extra-index-urls)。

反之亦然 - 如果可用,从私有索引下载,回退到 PyPI - 将私有索引设置为主索引,将 PyPI 设置为额外索引:

--index-url=https://my.index/ --extra-index-url=https://pypi.org/simple

如果您有其他用例,例如针对包欺骗的保护,pip 无法有效解决此问题。然而,像devpi 这样的索引服务器可以将下载请求代理到 PyPI 并提供开箱即用的欺骗保护。

【讨论】:

  • 看起来您还可以使用 --no-index 标志进行更多控制: --no-index --find-links /my/local/archives --find-links some.archives.com/archives
  • 另外请注意,如果您未在 requirements.txt 中指定,pip 仍会尝试获取模块的最新版本。因此,即使您将主索引设置为 myIndex 并将额外索引设置为 pypi,如果 pypi 包含比 myIndex 更高版本的同一库,它仍然会从 pypi 中提取包
  • 虽然它为我安装了 de 依赖项应用 pip install -r requirements.txt 但我在使用 requirements.txt 声明我的包的依赖项时仍然收到错误由 @ 构建987654336@。最后,我解决了这个问题,将相应的 url 引入为setup( ... dependency_links=[ "http://some.archives.com/archives" ], ...),如here 所述
猜你喜欢
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2021-04-04
  • 2020-11-06
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多