You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何main.rs无法访问dev-dependencies中的env_logger依赖?

解决方法

方法一:将示例代码移至examples/目录

Cargo默认会把dev-dependencies中的依赖用于examples/、tests/和benches/目录下的代码,完全符合你的需求:

  1. 在项目根目录创建examples/文件夹,把原main.rs的内容迁移到examples/demo.rs中。
  2. 保持Cargo.toml配置不变:
[dependencies]
log = "0.4.22"

[dev-dependencies]
env_logger = "0.11.5"
  1. 运行示例的命令改为:cargo run --example demo

这样env_logger只会在编译示例时被引入,不会成为库的传递依赖。

方法二:保留根目录main.rs,通过Cargo配置隔离依赖

如果不想移动文件,可以通过[[bin]]区块和条件编译实现:

  1. 修改Cargo.toml,给根目录的二进制目标单独配置:
[dependencies]
log = "0.4.22"

[dev-dependencies]
env_logger = "0.11.5"

[[bin]]
name = "your-crate-name"
path = "main.rs"
required-features = ["demo-log"]

[features]
# 定义仅用于开发/示例的feature
demo-log = []
  1. 在main.rs中用条件编译包裹日志初始化代码:
fn main() {
    #[cfg(feature = "demo-log")]
    {
        env_logger::builder().filter_level(log::LevelFilter::Debug).init();
    }

    // 你的示例业务逻辑
}
  1. 运行时需要指定feature:cargo run --features demo-log

用户使用你的库时不会自动启用demo-log feature,因此不会引入env_logger作为传递依赖。

补充说明

根目录的main.rs属于独立的二进制目标,默认不在dev-dependencies的作用范围内,这是你最初遇到错误的原因。第一种方法更符合Cargo的规范,配置简洁且便于管理多个示例,优先推荐。

内容的提问来源于stack exchange,提问作者workerjoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:43:22