如何指定依赖项的确切版本?

时间:2017-07-20 20:25:41

标签: rust rust-cargo

我正在使用

$ cargo --version
cargo 0.21.0-beta (7e00b82d9 2017-07-17)

我使用cargo new --bin test1创建了一个简单的项目,然后我添加了一个依赖项:

[dependencies]
lazy_static = "0.2.2"

到Cargo.toml(根据this这样的版本存在)和

#[macro_use]
extern crate lazy_static;

src/main.rs

当我运行cargo build时:

$ cargo build
   Compiling lazy_static v0.2.8
   Compiling test1 v0.1.0 (file:///tmp/test1)
warning: unused `#[macro_use]` import
 --> src/main.rs:1:1
  |
1 | #[macro_use]
  | ^^^^^^^^^^^^
  |
  = note: #[warn(unused_imports)] on by default

    Finished dev [unoptimized + debuginfo] target(s) in 0.49 secs

为什么cargo build编译我指定的最后一个版本0.2.8而不是0.2.2?我做错了什么?

2 个答案:

答案 0 :(得分:11)

精确版本由=作为前缀。这是"inequality" version requirements之一。

lazy_static = "= 0.2.2"

默认值是插入符号要求(例如0.2.2等同于^0.2.2),它接受次要版本和补丁版本更新(如果主要版本为0,则只接受补丁更新)。除非你有充分的理由不允许这样做,否则通常建议保留默认说明符。

答案 1 :(得分:5)

阅读文档通常是一个好主意。在这种情况下,Cargo documentationspecifying dependencies上有整个部分:

  

由于此字符串中没有任何运算符,因此它的解释方式与我们指定"^0.1.12"的方式相同,这称为插入符号要求。

     

插入要求允许SemVer兼容更新指定版本。如果新版本号不修改major,minor,patch分组中最左边的非零数字,则允许更新。

以及

  

不平等要求允许手动指定要依赖的版本范围或确切版本。

     

以下是不平等要求的一些例子:

        
= 1.2.3
  

我做错了什么?

我说,如果没有情有可原的情况,尝试指定确切的版本是错误的。通常没有什么理由强迫您的代码用户坚持使用较旧版本的包,并防止他们修复错误。

Cargo.lock是避免使用一组不一致的依赖项部署应用程序的正确工具。

相关问题