如何在离线环境中使用Cargo构建项目?

习明昊*_*习明昊 5 linux macos rust

我有一台可以访问互联网的OS X系统的笔记本电脑,以及出于安全原因无法访问互联网的Linux服务器.

我想构建一个依赖于Linux服务器的Rust项目.由于Linux服务器无法访问Internet,因此我cargo build在OSX笔记本电脑上运行该命令并将依赖源文件下载到该.cargo目录,然后将这些文件复制到Linux服务器并将其放入/root/.cargo目录.

我使文件结构相同,但是当我cargo build在Linux服务器上运行时,它仍然试图连接到这个网站,并且构建失败.cargo build尽管dep源文件已在.cargo目录中,但该命令始终尝试连接Internet .

如何在脱机环境中构建具有依赖项的Rust项目?为什么复制依赖项的源文件不起作用?

Ten*_*ken 24

从 Rust 1.37 开始,Cargo 的内置vendor命令可用于下载 crate 的依赖项并将其捆绑在 crate 本身中:

  1. 第一次运行cargo vendorvendor这将在您的板条箱根目录中设置一个名为的新目录。然后它将下载所有必需的依赖项并将它们存储在这个新目录中。

  2. 下载完依赖项后cargo vendor,它将打印一组您需要遵循的说明。目前,这些说明告诉您将几行复制到.cargo/config.toml. 请注意,这config.toml是相对于您的板条箱根目录的,而不是您的主目录中的根目录。

如果您执行了这两个步骤,您的板条箱将在其依赖项方面完全独立。您可以将此方法与 Rust 的离线安装程序结合起来,以完全离线地构建 Rust 程序。


Mat*_* M. 5

简短的回答是:现在,它很复杂.

长的答案是,cargo将尝试连接github以检查Cargo.toml文件引用的包的索引.

我建议你检查货物供应商原型来解决这个问题(由aturon,Rust工具子团队的成员),否则你可以看看有些人如何为crates.io 创建一个镜像,以避免依赖于互联网.

Rust构建需要不要求互联网和人们,但是现在没有幸福的解决方案.