gpt4 book ai didi

rust - 巩固 cargo 依赖

转载 作者:行者123 更新时间:2023-11-29 07:42:53 25 4
gpt4 key购买 nike

我有一个依赖项(cookie 实用程序)的项目依赖于 iron >= 0.3, <= 0.4 .

我的项目依赖于 iron 0.3 (所以我可以使用尚未更新到最新 iron 的 router 中间件)。

当我尝试编译我的项目时,cookie 实用程序提取 0.4 iron 的版本,并且由于使用了不同版本的 iron,我会收到错误消息。

但是,我可以这样做:

cargo update -p <cookie utility>

这(通常)改变了包对 iron 的依赖以匹配我正在使用的包,并消除了对 iron 的无关依赖 0.4 . (奇怪的是,有时我必须在更新之前运行该命令几次。)

显然我无法指定依赖项的依赖版本:Set specific version of the dependency of a project's dependency in Cargo.toml or Cargo.lock .

如果 cargo 能猜到我想使用单一版本的铁就好了,但我明白为什么它不能。但是,我很困惑为什么 cargo update -p <package>实际工作;更新包的依赖项似乎不直观。


我想我的第一个真正的问题是:如何指定依赖项的依赖版本(当且仅当我想要的版本在该库的支持版本范围内时)?我不认为上面链接的问题中建议的解决方案是理想的。我觉得如果 Cargo 能够很好地支持这一点会更好,这样库就可以在其功能允许的范围内保持其依赖版本范围尽可能开放。

与此同时,我发现这个“技巧”似乎可以满足我的要求 ( cargo update -p <pkg> )。我没有仔细看,但似乎没有在任何明显的地方描述这种行为。我的第二个问题是:这是合并依赖关系的有效方法吗?有什么地方可以找到有关此的更多信息?


重现步骤:

  1. 创建一个新项目:cargo new --bin ironapp ; cd ironapp .
  2. 创建 cookie 依赖项:cargo new cookie_util .
  3. cookie_util/Cargo.toml添加一个依赖项:iron = ">= 0.3, <= 0.4" .
  4. Cargo.toml添加两个依赖项:iron = "0.3.0"cookie_util = { path = "cookie_util"} .
  5. cargo build .确认 Cargo.lock 中需要两个版本的铁.
  6. 运行 cargo update -p cookie_util 1 到 4(或更多)次之间的任何地方。最终它将删除对 iron 0.4.0 的依赖。 .

我刚刚在 rustc-1.10.0/cargo-0.11.0 上测试了这个。我确定 targetCargo.lock在第 1 步开始时均不存在。

最佳答案

通读 cargo/issues/2064 的评论, 我意识到解决这些类型的依赖关系的更可靠的方法是使用 --precise旗帜。以我为例,

cargo update -p iron:0.4.0 --precise 0.3.0

删除不必要的依赖。这需要深入研究 Cargo.lock并手动确定依赖项可以收敛的位置,但比运行 cargo update -p <pkg> 要好得多并希望最好,或手动编辑 Cargo.lock .

关于rust - 巩固 cargo 依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38574874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com