【问题标题】:How do I use Cargo to build a project while offline?离线时如何使用 Cargo 构建项目?
【发布时间】:2019-08-03 18:15:30
【问题描述】:

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

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

我的问题是,我如何告诉 cargo 寻找已经安装的本地 crate 而不是再次下载?

【问题讨论】:

标签: rust rust-cargo


【解决方案1】:

即使在现代 Python 中,人们也不会只使用全局可用的 site_packages 目录并“污染”全局可用的包,而是会使用 virtual environments 来维护每个项目的正确版本控制——类似于 @987654324 @ 会。

使用cargo,一旦所有包下载完毕并在项目中明确指定它们的版本,就可以通过新的 --offline 在编译自己的项目时标记,在这种情况下 cargo 在不访问网络的情况下运行:

$ 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 依赖项。

【讨论】:

  • 感谢第一段,我不知道隔离包的重要性。按照你的步骤,我可以做我想做的事。但是在第 2 步,cargo build 产生了一些关于定位 crates.io~index 的错误。搜索后我发现,删除 ~/.cargo/registry 将解决问题。感谢您的精彩回答。 github.com/rust-lang/cargo/issues/4245
猜你喜欢
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多