< 返回版块

wangpeng8 发表于 2021-01-29 01:38

Tags:crate offline

我现在项目想使用几个dependencies, 在我自己笔记本上已经可以build,需要下载几十个依赖包 但是公司是绝对的内网,不能上网,也没法搭建git环境,如果把下载的包拷贝到内网,如何编译?cargo能否在offline下找到路径进行编译? 谢谢!

评论区

写评论
huangjj27 2021-02-02 22:31

可以参考我这边博客: 在天河二号上配置 Rust 环境

chuxiuhong 2021-01-30 00:05

这个我有经验,下面是我摸索的最简单步骤: 1.使用rustup管理外网机器的rust版本,你需要什么包在外面建一个空工程,在cargo.toml里写好依赖,然后cargo build一次,让它下载下来。 2.以windows为例,把你c:\Users\用户名 下的.rustup和.cargo文件夹迁移到相应位置,然后把环境变量添加好。 3.在你内网的机器里需要什么依赖就在cargo.toml里写好,然后记得改动cargo.toml后的第一次编译需要cargo build --offline 一次,以后不改依赖的话就可以直接cargo build(主要是为了cargo.lock生成)

以后每次更新直接覆盖掉第二步的两个文件夹即可,这是我找到的最方便的方法

Neutron3529 2021-01-29 20:12

我只会rustc开-L选项编译

ezlearning 2021-01-29 17:32

参考:https://stackoverflow.com/questions/31029095/disable-registry-update-in-cargo

Mac上我是可以配置的:

1. clone crates.io-index.git:

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

2. ~/.cargo/config.toml

[http]
proxy = "127.0.0.1:49797"
check-revoke = false

[source]

[source.crates-io]
replace-with = 'local-source'
# replace-with = "rustcc"

[source.local-source]
registry = "file:///Users/ezlearning/SourceCode/crates.io-index.git"

[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"
12101111 2021-01-29 12:24

cargo vendor

https://doc.rust-lang.org/cargo/commands/cargo-vendor.html

c5soft 2021-01-29 08:42

先说答案:能!cargo 能在断网的情况下编译。 做一下简单测试:先联网的情况下 cargo r 跑一遍如果没有问题,断网后:执行 cargo clean 清除编译结果,再次运行 cargo r 能够顺利编译。 cargo 编译检查依赖的时候首先查看本地缓存,如果没有找到相应文件,再去远程下载。

现在的问题就是如何把一台电脑上的缓存复制到另一台电脑上。也不难,拷贝几个文件夹,设置几个环境变量。最关键的一个坏境变量是:CARGO_HOME,指向cargo的工作文件夹,下面有bin,有registry,有git等文件夹,配置文件config.toml也放在这里。registry下面就是缓存的文件。复制的时候把整过CARGO_HOME指向的文件夹复制过去就行了。CARGO_HOME可以指向任何硬盘位置,放在C盘显然不合适,每次重装系统就覆盖了。

我的做法是:将所有免安装绿色软件放到D:\Programs文件夹下,D:\Programs下有Git,有mingw64等下级文件夹,当然也有一个Rust文件夹,Rust文件夹下建立cargo与rustup两个子文件夹,有一个SetEnvs.bat文件,看看SetEnvs.bat中的内容:

@ECHO OFF
IF NOT EXIST cargo MD cargo
IF NOT EXIST rustup MD rustup
::SETX RUSTUP_DIST_SERVER http://mirrors.ustc.edu.cn/rust-static
::SETX RUSTUP_UPDATE_ROOT http://mirrors.ustc.edu.cn/rust-static/rustup

SETX RUSTUP_DIST_SERVER https://mirrors.tuna.tsinghua.edu.cn/rustup
SETX RUSTUP_UPDATE_ROOT https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup
SETX RUSTUP_HOME D:\Programs\Rust\rustup

SETX CARGO_HOME D:\Programs\Rust\cargo
SETX PATH D:\Programs\Rust\cargo\bin;D:\Programs\mingw64\bin;D:\Programs\Git\bin

再看看 D:\Programs\Rust\cargo文件夹下config.toml文件的内容:

[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"

[source.crates-io]
replace-with = 'ustc'

我每次重装系统,只需要SetEnvs一下,然后rustup,cargo就能跑了。 有一个例外,我需要msvc,微软VC++的编译环境每次需要联网安装,我不知道如何绿化。

1 共 6 条评论, 1 页