rust-cargo - 在 Cargo 中禁用注册表更新

标签 rust-cargo

如何禁用 cargo updatecargo build试图访问 github.com;但仍然从 crates.io 下载适当的包

我的cargo.toml 中只有一个依赖项

[dependencies]
chrono = "0.2.14"

运行 cargo build
E:\>cargo build
    Updating registry `https://github.com/rust-lang/crates.io-index`
Unable to update registry https://github.com/rust-lang/crates.io-index

我们是 屏蔽 来自工作中的 github.com 但不是 crates.io。有没有一个选项让 cargo 仍然可以下载它需要的包而无需更新它的注册表?

最佳答案

如果您查看 configuring Cargo 的文档,你会注意到有一个 index关键在 [registry]节。这可以是 Git 存储库的任何路径。

因此,您可以制作 crates.io 索引的本地克隆。我通过像这样克隆它来验证这一点:

git clone --bare https://github.com/rust-lang/crates.io-index.git

然后编辑我的 Cargo 配置(具体来说,我更改了 ~/.cargo/config ,但这应该适用于文档描述的任何地方)以包含:
[registry]
index = "file:///F:/Data/Repositories/crates.io-index.git"

需要注意的几点:
  • 这并不反射(reflect)包的实际内容。那些来自不同的主机。但是,我不知道如何反射(reflect)这些内容:Cargo 在本地缓存这些内容要好得多。 cargo fetch应该够了包,然后复制缓存的 *.crate $HOME/.cargo/registry/cache/* 中的文件.
  • 这会导致您的 Cargo.lock 中出现包标识符。要更改的文件。这对于开发库来说不是问题,但对于二进制文件来说确实是个问题。标准做法是检查您的 Cargo.lock进入二进制文件的源代码控制,以便下游的每个人都使用完全相同的包版本进行构建。但是,修改后的索引意味着没有其他人能够在该锁定文件就位的情况下构建包。

    我通过在二进制包中放置另一个配置覆盖来解决这个问题,将索引重置为“官方”,但这在您的情况下甚至可能是不可能的。在这种情况下,您可能需要排除 Cargo.lock来自源代码管理,或者只是有一个“不使用官方索引”的分支。
  • 关于rust-cargo - 在 Cargo 中禁用注册表更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31029095/

    相关文章:

    regex - 如何在没有 Cargo 的情况下在 Rust 中使用正则表达式?

    dependencies - 如果相关功能被禁用,如何跳过依赖项

    rust - Cargo 功能是否可以启用可选依赖项中的功能而不强制激活这些 crate ?

    rust - 在嵌套循环中从 BufReader 读取时出错

    testing - cargo 测试不显示任何输出也不显示所有测试

    rust - 如何导入同一个 crate 的多个版本?

    rust - 在 Rust 中使用 iodbc

    rust - 如何在不 fork crate 的情况下将 #![feature(***)] 添加到另一个 crate 的属性?

    windows - 如何在 Rust cargo 构建脚本上调用批处理构建器脚本?

    rust - 将临时 git 依赖项修补到特定版本