rust crate.io 配置国内源(cargo 国内源) warning: spurious network error (2 tries remainin...

简介: rust :Crate 国内源配置

rust 笔记Crate 国内源配置


作者李俊才 (jcLee95)https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343

邮箱 :291148484@163.com

本文地址


目 录



1. 概述

Rust 官方默认的 Cargo 源服务器为 crates.io,其同时也是 Rust 官方的 crate 管理仓库,但是由于官方服务器部署在北美洲,中国大陆用户下载速度较慢,甚至反复中断下载——你是否正在经历 cargo 安装模块太慢?甚至进度卡停?

cargo add xxxx
    Updating crates.io xxxx
warning: spurious network error (2 tries remaining): failed to receive response: 操作超时
; class=Os (2)
       Fetch [======>                  ]  30.16%, 415.60KiB/s

… enmm,不用担心。当你主动来查找时,那么就如你所猜想的,作为 rust 语言的包管理器的 cargo,当然也有国内源。

2. Window 下配置国内源

2.1 新建配置文件

如果你安装好了 rust,在你的 用户主目录 中有一个.cargo 目录。其中用户主目录一般是 C:\Users\ +当前用户名 为路径的目录。

2.2 编辑配置文件

如果安装完成了 rust 当前用户目录下有一个 .cargo 目录。新建 config 文件,编辑内容:

[source.crates-io]
replace-with='rsproxy'
[source.rsproxy]
registry="https://rsproxy.cn/crates.io-index"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[net]
git-fetch-with-cli = true

2.3 也可以直接打开编辑器编辑

使用 Windows系统环境变量$HOME 可以直接指向主目录。如果你安装了 VSCode,可以打开一个终端,输入以下命令:

code $HOME/.cargo/config

其中,code 所使用的是 VScode 的可执行文件:code.exe。运行上面命令后,VSCode 自动打开一个指向 config 文件的空文件:

然后编辑之前的内容,并保存即可。

2.4 powershell 命令添加环境变量

如果尽在本窗口有效,则可以使用以下命令:

$env:RUSTUP_DIST_SERVER="https://mirrors.sjtug.sjtu.edu.cn/rust-static"
$env:RUSTUP_UPDATE_ROOT="https://mirrors.sjtug.sjtu.edu.cn/rust-static/rustup"

你可以使用以下方式查看是否设置成功:

Write-Host $env:RUSTUP_DIST_SERVER
Write-Host $env:RUSTUP_UPDATE_ROOT

如需要写入为长期的环境变量则需要使用以下命令(其中User表示环境变量级别为当前用户,你也可以设置为系统级变量):

[System.Environment]::SetEnvironmentVariable('RUSTUP_DIST_SERVER','https://mirrors.sjtug.sjtu.edu.cn/rust-static','User')
[System.Environment]::SetEnvironmentVariable('RUSTUP_UPDATE_ROOT','https://mirrors.sjtug.sjtu.edu.cn/rust-static/rustup','User')

3. Linux 下配置 cargo 国内源

3.1 安装 vim

如果已经安装有 vim / vi 或之类编辑工具则可以忽略。

# linux 的 debin 版本如 ubuntu 使用 apt 包管理器。如使用 centOS 的改用 yum 包管理器安装
sudo apt update
sudo apt install vim

(如果你在 docker 容器中,不需要 sudo)

3.2 编写配置文件

使用 vim 新建(或编辑已有)一个config文件:

sudo vim ~/.cargo/config

(如果你在 docker 容器中,不需要 sudo)

这时 vim 建立一个新的为保存config文件,英文输入模式下,输入 i 进入编辑模式,添加以下内容(和在Windows 时编辑的配置文件一样):

[source.crates-io]
replace-with='rsproxy'
[source.rsproxy]
registry="https://rsproxy.cn/crates.io-index"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[net]
git-fetch-with-cli = true

依次 exit:wq! 保存退出。

4. 关于 cargo 国内源

除了上面给出的配置,你可可以参考本节挑选一个自己喜欢的国内源进行配置。

字节跳动源

文档地址:https://rsproxy.cn/

crates.io 镜像

~/.cargo/config:

[source.crates-io]
# To use sparse index, change 'rsproxy' to 'rsproxy-sparse'
replace-with = 'rsproxy'
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
[source.rsproxy-sparse]
registry = "sparse+https://rsproxy.cn/index/"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[net]
git-fetch-with-cli = true

Rustup 镜像:

~/.zshrc or ~/.bashrc:

export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"

上海交大源

地址:https://mirrors.sjtug.sjtu.edu.cn/docs/rust-static

使用方法:安装rustup,将以下环境变量加入~/.bashrc或类似文件中:

export RUSTUP_DIST_SERVER=https://mirror.sjtu.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirror.sjtu.edu.cn/rust-static/rustup

清华源

Rust crates.io 索引镜像

文档地址:https://mirrors.tuna.tsinghua.edu.cn/help/crates.io-index.git/

编辑 ~/.cargo/config 文件,添加以下内容:

[source.crates-io]
replace-with = 'mirror'
[source.mirror]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

Rust crates.io 稀疏索引镜像

文档地址:https://mirrors.tuna.tsinghua.edu.cn/help/crates.io-index/

编辑 ~/.cargo/config 文件,添加以下内容:

[source.crates-io]
replace-with = 'mirror'
[source.mirror]
registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"

注:sparse+ 表示在使用稀疏索引,链接末尾的 / 不能缺少。

截至目前,可以通过 cargo +nightly -Z sparse-registry update 使用稀疏索引。

cargo 1.68 版本开始支持稀疏索引:不再需要完整克隆 crates.io-index 仓库,可以加快获取包的速度。如果您的 cargo 版本大于等于 1.68,可以直接使用而不需要开启 nightly。

中科大源

文档地址:http://mirrors.ustc.edu.cn/help/crates.io-index.html

Windows 用户在使用 crates 源时可能会出现 next InitializeSecurityContext failed: Unknown error 错误(见 https://github.com/ustclug/discussions/issues/339https://github.com/rust-lang/cargo/issues/7096)。一个 workaround 是在运行 cargo 的时候加入环境变量 CARGO_HTTP_CHECK_REVOKE=false,或者在配置中增加:

[http]
check-revoke = false

cargo 1.68 版本开始支持稀疏索引:不再需要完整克隆 crates.io-index 仓库,可以加快获取包的速度。如果您的 cargo 版本大于等于 1.68,可以在 $HOME/.cargo/config 中添加如下内容:

[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

$HOME/.cargo/config 中添加如下内容:

[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

如果所处的环境中不允许使用 git 协议,可以把上述地址改为:

registry = "https://mirrors.ustc.edu.cn/crates.io-index"
目录
相关文章
|
4月前
|
Rust 区块链
学Rust不学Cargo,等于没学Rust:features特性详解
在 Rust 中,Cargo 的 "features" 是一种条件编译机制,允许在编译 crate 时编译部分代码。这样可以在一个 crate 中提供多个功能,并根据需要选择性地启用或禁用这些功能。
138 1
|
4月前
|
存储 Rust 测试技术
【一起学Rust · 项目实战】命令行IO项目minigrep——测试驱动开发完善功能
【一起学Rust · 项目实战】命令行IO项目minigrep——测试驱动开发完善功能
117 0
|
12天前
|
Rust 编译器 开发者
Cargo:Rust的神秘助手,它将如何改变包管理游戏规则?
【8月更文挑战第31天】Rust的包管理器Cargo简化了依赖管理和构建过程,与编译器无缝集成,提供从依赖下载到编译构建的全套解决方案。通过`cargo new`创建项目后,编辑`Cargo.toml`文件即可轻松管理依赖。Cargo还支持自动生成文档、运行测试及发布代码,并通过`crates.io`平台方便查找和分享Rust库,是Rust生态系统中的重要工具,有助于提升开发者生产力。
30 1
|
2月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
|
3月前
|
Rust Shell 索引
使用阿里云镜像加速Rust与Cargo安装及更新
使用阿里云镜像加速Rust与Cargo安装及更新
353 0
|
3月前
|
Rust Unix Windows
使用Cargo国内镜像提升Rust开发效率
使用Cargo国内镜像提升Rust开发效率
251 0
|
3月前
|
Rust
使用Cargo创建、编译与运行Rust项目
使用Cargo创建、编译与运行Rust项目
|
4月前
|
Rust 自然语言处理 算法
【Rust 中的错误处理:掌握 Option、Result、expect、unwrap 和 ? 运算符】Error Handling in Rust
【Rust 中的错误处理:掌握 Option、Result、expect、unwrap 和 ? 运算符】Error Handling in Rust
157 0
|
4月前
|
存储 Rust 安全
Rust标准库概览:集合、IO、时间与更多
本文将带领读者深入了解Rust标准库中的一些核心模块,包括集合类型、输入/输出处理、时间日期功能等。我们将通过实例和解释,探讨这些模块如何使Rust成为高效且安全的系统编程语言。
|
4月前
|
Rust Java 编译器
学Rust不学Cargo,等于没学Rust:workspace详解
Rust 中的`Workspace`是一种组织多个 Rust crate(项目或库)的结构。使得它们可以协同工作、共享依赖关系,以及更方便地进行管理和构建。 如果你是Java开发者,workspace这个概念类似Java中的`maven`父工程。 子工程可以共享父工程中的很多配置项,如依赖,版本等配置。子工程可以`选择性的继承`父工程的配置。
111 2