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

使用include_str的已发布Rust包未指定--path无法安装问题

问题原因及解决方案

错误原因

核心问题是你发布到crates.io的包中没有包含resources/tla-unicode.csv文件,导致cargo install从crates.io拉取包编译时,build.rs找不到源文件:

  • Cargo默认仅自动包含src/、Cargo.toml、README*、LICENSE*等标准文件,自定义的resources/目录不会被纳入发布包。
  • 本地开发/打包时,你拥有完整的项目目录,resources文件存在,所以所有本地操作(cargo build/package/--path安装)都能正常执行;但从crates.io下载的包缺少该目录,build.rs执行std::fs::copy时触发NotFound错误。
  • 你提到手动从crates.io下载包后--path安装正常,大概率是误操作(如下载了GitHub源码包而非crates.io的发布包)。

另外,你已经通过include_str!将csv内容嵌入二进制,build.rs中的文件复制操作其实是多余的,这进一步放大了问题。

解决方案

方案1:移除多余的build.rs复制逻辑(推荐)

既然已经用include_str!把csv内容编译进程序二进制,完全不需要再复制文件到target目录。修改build.rs仅保留监听文件变更的逻辑即可:

fn main() {
    println!("cargo:rerun-if-changed=resources/tla-unicode.csv");
}

这样既保留了文件变更时自动重新编译的能力,又避免了依赖外部文件路径的问题。

方案2:确保resources目录被包含到发布包(如果必须保留复制逻辑)

在项目根目录的Cargo.toml中添加include字段,明确指定要包含的文件:

include = [
    "src/**/*",
    "resources/**/*",
    "Cargo.toml"
]

执行cargo package --list验证包内容,确认resources/tla-unicode.csv在列表中后,重新执行cargo publish更新crates.io上的包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:35:34