Rust下載依賴慢或卡住的問題及解決方法

程序員咋不禿頭 2024-05-15 00:15:36

如果你在使用Rust進行編程時,你可能會遇到下載依賴庫時出現下載緩慢或者卡住的情況。由于Rust默認的鏡像下載地址是在國外,因此在某些網絡環境下,下載速度可能會受到影響。

解決方案

對于以上的問題,我們有幾種可能的解決方案:

1. 開啓命令行或全局代理

在大多數情況下,代理工具默認只會開啓浏覽器的代理,對于命令行或其他軟件的訪問,並不會代理流量。這意味著這些通過命令行或其他軟件進行的網絡訪問還是通過正常的網絡進行的,導致下載速度非常慢。

因此,你需要在你的代理工具中開啓終端代理或全局代理。以ClashX爲例,你可以通過點擊“複制終端代理命令”來自動複制以下的代理命令,並在終端中執行這些命令以完成代理設置:

export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891

2. 修改Rust的下載鏡像爲國內鏡像地址

另一種解決方案是直接修改Rust的默認下載鏡像地址爲國內的鏡像地址。這種方法可以一勞永逸地解決問題,但配置過程可能稍顯麻煩。

要使用crates.io之外的鏡像服務,你需要修改$HOME/.cargo/config.toml文件,以添加新的服務提供商。有兩種方式可以實現這個目標:新增鏡像地址和覆蓋默認的鏡像地址。

2.1 新增鏡像地址

首先是在crates.io之外添加新的注冊服務。在$HOME/.cargo/config.toml文件中添加以下內容:

[registries]ustc = { index = "https://mirrors.ustc.edu.cn/crates.io-index/" }

這種方式只會新增一個新的鏡像地址,因此在引入依賴的時候,你需要指定該地址。例如,如果你想在你的項目中引入time包,你需要在Cargo.toml文件中使用以下方式進行引入:

[dependencies]time = { registry = "ustc" }

這種方法的缺點是,每次添加新的依賴時,都需要在Cargo.toml文件中指定新的鏡像地址。因此,如果你的項目非常大,這種方法可能會非常麻煩。

2.2 覆蓋默認的鏡像地址

相比于新增鏡像地址,我們更推薦覆蓋默認的鏡像地址這種方法,因爲這種方法無需修改Cargo.toml文件,而是直接使用新注冊服務來替代默認的crates.io。

在$HOME/.cargo/config.toml文件中添加以下內容:

[source.crates-io]replace-with = 'ustc'[source.ustc]registry = "git://mirrors.ustc.edu.cn/crates.io-index"

這種方法的好處是,任何需要從crates.io下載的包,都將從中國科大的鏡像地址下載,從而極大地提高下載速度。

下載卡住的問題

如果你遇到了下載進程完全卡住不動的問題,那麽問題的原因可能是索引更新速度太慢。Rust的包數量越來越多,索引文件也越來越大,如果不使用國內鏡像,這種情況可能會比較常見。不過,一旦你配置好了國內鏡像,這個問題應該就可以得到緩解了。

另外,如果你同時使用了VSCode和命令行,而VSCode的rust-analyzer插件在下載新的依賴時鎖定了當前項目,那麽你可能會看到以下的錯誤消息:

$ cargo build Blocking waiting for file lock on package cache Blocking waiting for file lock on package cache

這個問題出現的原因是,VSCode的下載進程正在運行,而該下載進程已經鎖住了當前的項目,導致你無法在另一個地方再次進行構建。解決這個問題的方法有幾種:

增加下載速度(見前面的解決方法)耐心等待持有鎖的用戶構建完成強行停止正在構建的進程,例如殺掉IDE使用的rust-analyzer插件進程,然後刪除$HOME/.cargo/.package_cache目錄總結

以上就是在使用Rust下載依賴時可能遇到的問題以及解決方法。希望對你有所幫助,也歡迎你在留言區分享你的經驗或者提出你的疑問!

0 阅读:7

程序員咋不禿頭

簡介:感謝大家的關注