Cargo加载工作区成员清单失败问题求助
Cargo 异常查找非Rust项目目录的Cargo.toml问题解决
问题现象
所有Rust项目的Cargo命令均执行失败,存在两种异常行为:
- 尝试在父目录(普通项目文件夹,非Rust项目)查找
Cargo.toml - 莫名尝试在另一非Rust项目文件夹中查找
Cargo.toml
错误信息
error: failed to load manifest for workspace member `/home/celestial/Documents/projects/graphs` Caused by: failed to read `/home/celestial/Documents/projects/graphs/Cargo.toml` Caused by: No such file or directory (os error 2)
问题起因
调试运行自行编写的Rust项目模板Bash脚本后出现该问题,脚本代码如下:
#!/bin/bash if [ ! -n "$1" ]; then echo "use $(basename "$0") <project-name> instead!" exit fi BASE="$(eval echo ~)/Documents/projects" NEW_PROJECT="$BASE/$1" mkdir -p $NEW_PROJECT cd $NEW_PROJECT cargo init xdg-open $NEW_PROJECT if which bacon; then echo "bacon found! running..." (cd $NEW_PROJECT && bacon) fi
已尝试的解决方案
- 通过rustup重新安装Rust
- 在
~/.cargo/config中添加[source.crates-io] registry = "https://github.com/rust-lang/crates.io-index" - 在Cargo查找的文件夹中执行
cargo init(修复后会报错其他文件夹) - 删除原有项目并创建新Rust项目(所有Rust项目均出现该问题)
- 检查文件夹权限(均为777)
- 尝试重置工作区(未掌握操作方法)
问题根源与解决方法
1. 检查上层目录的误生成工作区文件
大概率是**/home/celestial/Documents/projects目录下被误创建了Cargo.toml**,这个文件会把整个projects目录标记为Cargo工作区,导致所有子目录都被当作工作区成员,非Rust项目目录没有Cargo.toml就会触发报错。
- 处理方式:
- 如果不需要该工作区,直接删除
/home/celestial/Documents/projects/Cargo.toml; - 如果需要保留工作区,打开该文件,修改
members字段,移除不需要纳入工作区的目录(比如graphs这类非Rust项目)。
- 如果不需要该工作区,直接删除
2. 排查单个项目的工作区配置
打开出问题的Rust项目内的Cargo.toml,检查是否存在[workspace]字段或workspace = "../"这类引用上层目录的配置,若有则删除或修正路径。
3. 清除Cargo缓存
执行以下命令清除缓存,再重新尝试Cargo命令:
cargo clean rm -rf ~/.cargo/registry/* ~/.cargo/git/*
(注意:操作前可备份~/.cargo/registry和~/.cargo/git目录下的重要内容)
4. 脚本误操作排查
调试脚本时可能在projects根目录误执行过cargo init或cargo new命令,导致生成了上层工作区文件。后续使用脚本时确保只在新建的子目录内执行cargo init。
内容的提问来源于stack exchange,提问作者CelestialEXE
相关产品推荐
相关产品推荐

