从 GitHub 构建依赖箱时找不到 `Cargo.toml`

问题描述 投票:0回答:6

我正在尝试使用 rust-mosquitto 库。我现在的

Cargo.toml
是:

[package]
name = "HomeDaemon"
version = "0.1.0"
authors = ["RTR <[email protected]>"]

[dependencies.mosquitto]
git = "https://github.com/kteza1/rust-mosquitto"

当我运行

cargo build
时,报如下错误:

Could not find `Cargo.toml` in `/Users/ravitejareddy/.cargo/git/checkouts/rust-mosquitto-8203e77dcf072bf7/rust-mosquitto`

~/.cargo/git/checkouts/rust-mosquitto-8203e77dcf072bf7/master
中的实际下载显示
Cargo.toml
存在。

上面的路径多了一个

rust-mosquitto
,有问题吗?

rust rust-cargo
6个回答
8
投票

这并没有具体回答@tez 提出的问题,但我遇到了同样的错误,但根源略有不同。我在 vim 中写了一些简单的代码,所以我创建了一个简单的 main.rs 文件。当我

cargo run
它时,它吐出同样的错误:

错误:在

Cargo.toml
或任何父目录
中找不到
/Users/yvonmanzi/Documents/Rust

令人惊讶的是,没有后见之明,当然,

rustc main.rs
正在按预期创建二进制可执行文件,而
cargo run
不是。事实证明,我已经使用
cargo new project-name --bin
创建了我所有的 Rust 包(又名项目),如图 here 所示,因此默认情况下包括
Cargo.lock
Cargo.toml
src
文件夹。希望现在很清楚,我的只是一个简单的菜鸟错误;从字面上看,我的项目文件夹中没有
Cargo.toml
。所以,亲爱的新秀联盟 Rustacean,如果你遇到同样的错误,请使用
cargo new project-name --bin
命令创建你的项目。


4
投票

问题来自您的

Cargo.toml
在示例/滴答中:

[dependencies.mosquitto]
version = "*"
path = "../../../rust-mosquitto" 

从 git 下载项目时,会扫描所有子目录以查找更多

Cargo.toml
文件。如果你运行
RUST_LOG=trace cargo build -v
,你会看到发生了什么:

TRACE:cargo::ops::cargo_read_manifest: looking for root package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master, source_id=https://github.com/kteza1/rust-mosquitto#7e08a291
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master
TRACE:cargo::ops::cargo_read_manifest: read_package; path=/Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/Cargo.toml; source-id=https://github.com/kteza1/rust-mosquitto#7e08a291
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/.git
TRACE:cargo::ops::cargo_read_manifest: not processing /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/.git
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/examples
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/examples/c-mosquitto
TRACE:cargo::ops::cargo_read_manifest: looking for child package: /Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/examples/ticktock
TRACE:cargo::ops::cargo_read_manifest: read_package; path=/Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/master/examples/ticktock/Cargo.toml; source-id=https://github.com/kteza1/rust-mosquitto#7e08a291
DEBUG:cargo: handle_error; err=CliError { error: ChainedError { error: Unable to update https://github.com/kteza1/rust-mosquitto, cause: Could not find `Cargo.toml` in `/Users/shep/.cargo/git/checkouts/rust-mosquitto-77eb7033f32b19c9/rust-mosquitto` }, unknown: false, exit_code: 101 }

Cargo 然后尝试确保嵌套的

Cargo.toml
可以满足所有依赖项。


1
投票

在 git hub 上,我找到了这个问题的答案。我创建了一小段行脚本,修改了它,然后运行了它。它工作得很好!这是脚本:

cargo install --list | 
awk '/^\w/ { print $1 }' | 
while read x; do cargo install "$x"; done

我什么都没改变。确保你从

$HOME/.cargo
运行它 我找到的最好、最短的答案之一!


0
投票

在终端上运行 ->

sudo find / -name Cargo.toml

这将找到文件的路径

然后运行->

cd <the path of the file (ofc excluding the file itself)>

现在货物正在为我工作


0
投票

我认为的问题是我没有在正确的目录中运行命令。

  1. 运行“cargo new ”后
  2. 你需要进入你的目录/文件夹和
  3. 然后执行“cargo run”命令。

注意:我尝试运行“cargo run ”以查看它是否可以从文件夹外运行,但失败了。 我相信货物正在当前目录中寻找 pom 文件。


-1
投票

在我在程序/脚本下执行那些 *.sh 后它起作用了(然后再次执行 cargo build-bp )

© www.soinside.com 2019 - 2024. All rights reserved.