首页 / 资讯中心 / 文章详情

Rust 依赖包管理

Rust 依赖包管理 ★ FEATURED ARTICLE
文章目录1. 两个核心文件2. 添加依赖首选 cargo add3. 手动编辑 Cargo.toml4. 其他依赖来源5. 构建与更新6. 总结参考文献Rust 的依赖管理由Cargo负责它是 Rust 的官方构建系统和包管理器。核心涉及两个文件Cargo.toml依赖声明和Cargo.lock依赖锁定两者分工明确共同保证构建的可复现性。1. 两个核心文件文件作用谁生成是否提交到 GitCargo.toml声明依赖的版本范围、特性、项目元数据人写✅ 必须提交Cargo.lock锁定每个依赖的精确版本和校验和Cargo 自动生成✅ 可执行项目必须提交库项目通常不提交为什么需要Cargo.lockCargo.toml写的是范围如serde 1.0表示 1.x 都行。Cargo.lock锁的是精确版本如serde 1.0.200确保今天和明天构建的依赖完全一致。没有Cargo.lock每次构建可能拉到不同的兼容版本导致“昨天能编译今天不能”的问题。库项目 vs 可执行项目项目类型Cargo.lock是否提交原因可执行项目binary✅ 必须提交保证部署环境与开发环境依赖一致库项目library❌ 通常不提交库的使用者会自己生成 lock 文件2. 添加依赖首选 cargo add# 添加最新兼容版本cargoaddserde# 添加指定版本cargoaddserde1.0.200# 添加并启用特性featurescargoaddtokio--featuresfull# 添加开发依赖仅测试/示例使用cargoadd--devcriterion3. 手动编辑 Cargo.toml[dependencies] serde 1.0 # 语义化版本允许 1.x.x 最新版 rand 0.8.5 # 第二个 是版本号的一部分表示“精确匹配” reqwest { version 0.11, features [json] } # 带特性版本号写法1.0是默认的插入符Caret要求等价于1.0.0, 2.0.0对于0.x版本则限制在0.x.0, 0.(x1).0。4. 其他依赖来源[dependencies] # 从 Git 仓库 my_lib { git https://github.com/user/my_lib, branch main } # 从本地路径常用于 Workspace 内部 local_utils { path ../local_utils }注意如果要把包发布到 crates.io仅用path声明的依赖是不允许的需要同时提供version例如{ path ../local_utils, version 0.1.0 }。5. 构建与更新声明依赖后运行cargo build即可。Cargo 会自动下载并编译所有依赖同时生成Cargo.lock。cargobuild# 下载并编译依赖cargoupdate# 更新所有依赖到兼容范围内的最新版修改 Cargo.lockcargoupdate-pserde# 只更新特定依赖cargotree# 查看依赖树cargotree-d# 只显示重复的依赖cargoremove serde# 移除依赖cargoinfo serde[--registryregistry]# 查看某个依赖 package 的详细信息版本、依赖、features 等cargosearch serde[--registryregistry]# 在 crates.io 上搜索相关 package1关于包版本升级。升级包版本具体用哪个命令取决于你想改的是 Cargo.toml 还是 Cargo.lock。cargo add修改 Cargo.toml 里的版本声明。当你想主动把依赖的版本要求提升到更高版本比如从 0.11 升到 0.12时使用。cargo update修改 Cargo.lock 里的精确版本。它不会动 Cargo.toml只在现有版本范围内把锁文件里的版本更新到最新。所以如果你是想提升依赖的版本要求用 cargo add如果只是想在当前版本约束下刷新锁文件用 cargo update。2关于包版本查询。cargo info 用于查看某个 package 的详细信息不能像go list -m -versions命令那样查出依赖的所有可用版本注意情况一在项目目录内执行且不指定版本这时 cargo info 会优先使用你项目 Cargo.lock 中锁定的版本。如果 Cargo.lock 不存在它才会去查询注册表并自动生成一个新的。所以在这种场景下它显示的确实是你项目正在使用的版本而不是 crates.io 上的最新版。情况二在项目目录外执行或指定了版本这时 cargo info 包名 会去查询 crates.io注册表显示该包的信息。如果没有指定版本它会根据你当前 Rust 版本MSRV选择一个合适的版本这个版本通常就是最新稳定版。cargo search 用于在 registry 搜索 package默认 registry 是 crates.io。也不能像go list -m -versions命令那样列出依赖包的所有版本每个命中结果只带一个版本一般是当前最高的稳定版。单纯查最新版本号cargo search 更合适始终查注册表想同时看详细信息用 cargo info 包名latest。6. 总结操作命令 / 写法添加依赖cargo add crate推荐添加带特性的依赖cargo add crate --features feat添加开发依赖cargo add --dev crate更新依赖cargo update查看依赖树cargo tree依赖声明Cargo.toml人写必须提交依赖锁定Cargo.lock自动生成可执行项目必须提交核心记住Cargo.toml写声明Cargo.lock锁版本。日常开发用cargo add添加依赖用cargo build拉取编译即可。参考文献包和crate - Rust 程序设计语言中文版
阅读完成 · 觉得有帮助?
咨询建站