如何在离线状态下使用 Cargo 构建项目?

How do I use Cargo to build a project while offline?

我正在通过使用 rand crate 创建小程序来练习 Rust (1.36)。但问题是每当我使用 cargo new 创建新项目然后在 cargo.toml 中添加 rand 依赖项时。它连接到互联网并再次下载相同的 rand 包。

与 Python 相比,已安装的软件包进入 site_package 文件夹并可供 import/use 任何程序使用。不需要重新下载。

我的问题是,如何让 cargo 查找已安装的本地 crate 而不是重新下载?

即使在现代 Python 中,人们也不会只使用全球可用的 site_packages 目录和 "pollute" 全球可用的软件包,而是会使用 virtual environments为每个项目维护适当的版本控制——类似于 cargo 所做的。

使用cargo,一旦所有的包都被下载并在项目中明确指定了它们的版本,就可以通过新的 --offline flag while one compiles one's project, in which case cargo runs without accessing the network:

$ cargo build --offline

也就是说,按照您描述的方式做某事当然是完全可能的:

  1. 创建一个目录,您的依赖项所在的目录:
    $ mkdir offline_resources
    $ cd offline_resources
    
  2. 下载你需要的版本库并构建它(这是最后一点你需要使用网络的地方):
    $ git clone https://github.com/rust-random/rand.git
    $ cd rand
    $ cargo build
    
  3. 创建一个新项目:
    $ cd ../..
    $ cargo new use_offline
    $ cd use_offline
    
  4. 编辑Cargo.toml
    [dependencies]
    rand = { path="../offline_resources/rand", version="0.7.0" }
    
  5. 建立你的项目:
    $ cargo build --offline
    
  6. 按照步骤 3 到 5 创建另一个将使用相同 rand 依赖项的项目。