离线时如何使用Cargo建立项目?

owl*_*owl 2 rust rust-cargo

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

与Python相比,已安装的软件包转到site_package文件夹,并可供导入/使用到任何程序。无需再次下载。

我的问题是,如何告诉货物寻找已经安装的本地板条箱,而不是再次下载?

Pet*_*aro 5

即使在现代Python中,人们也不仅会使用全局可用的site_packages目录并“污染”全局可用的软件包,而且还会使用虚拟环境来维护每个项目的正确版本控制-类似于这样cargo做。

使用cargo,一旦下载了所有软件包并在项目中明确指定了它们的版本,就可以--offline在编译项目时传递new 标志,在这种情况下cargo ,无需访问网络即可运行

$ cargo build --offline
Run Code Online (Sandbox Code Playgroud)

话虽如此,做您描述的事情当然是完全可能的:

  1. 创建一个目录,您的依赖项将在该目录中:
    $ mkdir offline_resources
    $ cd offline_resources
    
    Run Code Online (Sandbox Code Playgroud)
  2. 下载所需的存储库并进行构建(这是使用网络的最后一步):
    $ git clone https://github.com/rust-random/rand.git
    $ cd rand
    $ cargo build
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建一个新项目:
    $ cd ../..
    $ cargo new use_offline
    $ cd use_offline
    
    Run Code Online (Sandbox Code Playgroud)
  4. 编辑Cargo.toml
    [dependencies]
    rand = { path="../offline_resources/rand", version="0.7.0" }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 建立您的专案:
    $ cargo build --offline
    
    Run Code Online (Sandbox Code Playgroud)
  6. 遵循步骤3到5,创建另一个将使用相同rand依赖项的项目。

  • 感谢第一段,我不了解隔离软件包的重要性。然后按照您的步骤,我可以做我想做的事。但是在第2步中,货物建造产生了有关定位“ crates.io〜index”的错误。搜索后,我发现删除〜/ .cargo / registry将解决问题。感谢您的出色回答。https://github.com/rust-lang/cargo/issues/4245 (2认同)