Rust 我可以强制使用依赖项吗';解析软件包版本时的Cargo.lock?
库不使用Rust 我可以强制使用依赖项吗';解析软件包版本时的Cargo.lock?,rust,rust-cargo,Rust,Rust Cargo,库不使用Cargo.lock,而是使用Cargo.toml中的依赖项版本范围,以减少共享依赖项之间的库重复 然而,我认为在某些情况下,使用已知的成功构建lib依赖项是更可取的。也就是说,当依赖项由于自身依赖项的更新而不再构建时 如果有库的Cargo.lock而不是Cargo.toml,是否可以将Cargo配置为支持库的Cargo.lock?最好是按包装 (Update:以下问题已在wither 0.5.1中修复,其中依赖项现在是mongodb=“0.10.*”。然而,如果mongodb更新其b
Cargo.lock
,而是使用Cargo.toml
中的依赖项版本范围,以减少共享依赖项之间的库重复
然而,我认为在某些情况下,使用已知的成功构建lib依赖项是更可取的。也就是说,当依赖项由于自身依赖项的更新而不再构建时
如果有库的Cargo.lock
而不是Cargo.toml
,是否可以将Cargo配置为支持库的Cargo.lock
?最好是按包装
(Update:以下问题已在wither 0.5.1中修复,其中依赖项现在是
mongodb=“0.10.*”
。然而,如果mongodb更新其bson依赖关系,这个问题似乎会再次出现——至少直到wither的依赖关系再次更新以匹配。或者,正如@Shepmaster在回答中提到的,直到实现为止。)
我的特殊情况是尝试使用该软件包:
- wither's
指定依赖项Cargo.toml
mongodb=“No,您不能使用库的Cargo.lock 因为它使用bson的一些结构与mongodb交互 这是根本问题。目前,依赖项解析程序不知道一个板条箱在公共接口中暴露了另一个板条箱的类型。这将在实现时解决 如中所述,您可以微调要合并的依赖项的版本:
另见:cargo更新-p bson:0.11.1——精确到0.10.0
也就是说,由于semver,您的代码工作得很好:[dependencies] wither = "0.5.1" mongodb = "0.3.7"
似乎不可避免地,bson 0.10.0用于mongodb,bson 0.11.1用于wither$cargo tree--反转-p bson bson v0.10.0 ├── mongodb v0.3.7 │ ├── 示例v0.1.0(file:///private/tmp/example) │ └── 威瑟尔v0.5.1 │ └── 示例v0.1.0(file:///private/tmp/example) (*)
事实并非如此,你可以从(a)上面的例子和(b)中看出您自己关于可接受版本范围的陈述。或者仅仅是因为语义版本控制常常不可靠——这是1.0.0之前的软件包长期存在生锈问题的一个症状。这两个陈述彼此没有关联。如果您不相信语义版本控制或者人类没有能力遵循语义版本控制,那么板条箱是不可靠的1.0之前或之后都不会有任何影响。当然,1.0.0之前的包是显式易变的。但是,这意味着我的Cargo.lock中90%的包可以/不应该自动更新。也许我应该说“…因为语义版本控制保证经常不可用事实上,semver和Cargo为1.0之前的版本提供了版本控制保证。如果主版本为0,则更改次版本被视为中断。如果该值也是0,则更改修订号被视为中断。1.0之前的版本只是普通版本,数字移位了。@DK感谢您指出这一点。它甚至在中提到了这一点:)谢谢-我不知道
。Re:代码运行得很好,版本0.5.0被破坏了,0.5.1在我发布这个问题一小时后发布了!——精确。