gsp*_*spr 5 dependency-management rust-cargo
我主要想使用 Debian 的 Rust 包,而不是从更广泛的互联网上获取一些随机代码(我知道,我很守旧,我们不要进入这部分)。为此,我的~/.cargo/config.toml样子
[net]
offline = true
[source]
[source.crates-io]
replace-with = "debian"
[source.debian]
directory = "/usr/share/cargo/registry"
Run Code Online (Sandbox Code Playgroud)
librust-*-dev在我安装了我想要的软件包后,这非常有效。然而,在一些特定的项目中,我想取消这条规则并告诉 Cargo“嘿,你实际上可以疯狂地从 crates.io 获取任何你想要的东西”。根据Cargo book,特定于项目的项目/project/.cargo/config.toml应该优先于我的用户项目。假设该项目特定.cargo/config.toml:
[net]
offline = false
[source]
[source.crates-io]
Run Code Online (Sandbox Code Playgroud)
我仍然无法使用cargo build来自替换源之外的依赖项的项目。例如,如果我制作一个Cargo.toml取决于yew(随机选择的板条箱,我知道在我的替换源中不可用)我得到
$ cargo build
error: no matching package found
searched package name: `yew`
Run Code Online (Sandbox Code Playgroud)
我对 Cargo 的来源、替换和每个项目的覆盖有什么误解?
看起来您似乎遇到了这个问题:https://github.com/rust-lang/cargo/issues/8687
您想取消设置上层的配置键config.toml,但这不受支持。
我对配置进行了一些操作,让它工作的唯一方法是在项目本地覆盖config.toml上层config.toml.
在你的情况下,你的上层config.toml指定了replace-with,所以你必须覆盖它。但是您不能用crates-io您要使用的注册表覆盖它,因为那正是带有密钥的注册表replace-with。
因此,在解决上述问题之前,我们本质上必须在配置中使用镜像并作为实际的注册表来下载:
[net]
offline = false
[source]
[source.crates-io]
replace-with = "crates-io-mirror"
[source.crates-io-mirror]
registry = "https://gitlab.com/integer32llc/crates.io-index"
Run Code Online (Sandbox Code Playgroud)
正如我们都测试的那样,似乎无法重用正常的 crates.io 注册表 url,因为它已经定义并且会失败:
错误:源 crates-io-mirror 定义了源注册表https://github.com/rust-lang/crates.io-index,但该源已由 crates-io 定义 注意:不允许多次定义源。
因此,上面的 URL 是 crates.io 的实际镜像服务器。然后就可以cargo build在本地项目中运行成功了。
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |