使用源代码构建parity后,Cargo构建卡在"阻塞等待注册表索引的文件锁定"处。

276

我按照readme中的指示从源代码构建了Parity,然后执行了以下命令:

cargo build --release
~/.cargo/bin/cargo build --release
根据指示,两者在提示符挂起的同时返回了以下消息。
 Blocking waiting for file lock on the registry index

我用的是 Mac 电脑。


54
对我来说问题在于我的 rust-analyzer vscode 插件正在进行索引。一旦它完成,运行 cargo run 命令就能正常工作了。 - oriont
14
在使用 Rustler 在 Elixir 中使用 Rust 代码时,我在 Linux 上遇到了同样的问题。根据此问题 https://github.com/rust-lang/cargo/issues/9742 中提到的方法,通过删除 ~/.cargo/.package-cache 目录来解决该问题。 - Ali Shirvani
1
VSCode 是我的瓶颈,就像 @oriont 所说的那样。我只需要等待 rust-analyzer 完成它正在做的事情即可。 - Alan Richards
1
我相信这只适用于少数用户,但对我来说,重新启动Visual Studio Code解决了问题。 - John Miller
@oriont是正确的。当我的rust-analyser正在索引时,我遇到了这个问题。 - intlsy
显示剩余4条评论
31个回答

230

6
在等待30秒后,对我起作用了,而且没有做任何事情。 - Helin Wang
121
我不得不同时删除~/.cargo/.package-cache - tadman
29
我猜是 VS Code 里的 rust-analyzer 插件引起了问题。当我打开项目后,它开始下载组件时会出现阻塞的情况。请注意,这里不需要解释或添加其他内容,只需直接进行翻译即可。 - sakura-bloom
4
删除 .cargo/registry/index.package-cache 后对我有用。 - Emad Baqeri
我禁用了 rust-analyzer,神奇地它开始工作了。 - undefined
显示剩余4条评论

228

运行 cargo clean 似乎可以解决这个问题。


9
看起来不那么粗糙,但出于某种原因只有被采纳的答案解决了我的问题。它是否在做同样的事情? - Felix Jassler
3
不。与被接受的答案不同,这将删除运行此命令的项目的整个目标文件夹。 - Prajwal
下次一定要注意这个!已经按照@ali-shirvani的建议手动删除了~/.cargo/.package-cache,效果非常好。 - mud
就是这样我明白了。也就是说,我运行了"cargo clean"命令,然后在构建过程中卡在了"Blocking waiting for file lock on package cache"的地方。 - user656449
对我来说起作用了。我正在使用它在一个开发容器中,但第一次构建时似乎出了些问题。不过,运行cargo clean解决了这个问题。 - Steven
能解释一下魔法吗? - undefined

167

当您同时运行同一个项目的两个编译时,就会出现这种情况。编译器使用锁文件以避免数据竞争问题。

有一些可能性:

  • 如果您自己运行了这两个编译,解决方案很明显:需要取消其中一个编译。

  • 如果您使用的是自动编译项目的集成开发环境(IDE):您可以等待作业完成或关闭IDE。如果不起作用,则可能是由于RLS挂起。您可以运行pkill rls来解决问题。

  • 作为最后的手段,您可以强制删除锁文件使用rm -rf ~/.cargo/registry/index/*,如jvatic的回答所述


30
没问题,就我个人而言,实际上是因为 VS Code 的货物扩展自动编译了我的项目。 - Hom Bahrani
1
和 @HomamBahrani 一样。我认为这个答案揭示了根本原因,应该排名更高。 - June Wenston
非常抱歉,请问这个.cargo/registry/index/文件在哪里?我在项目目录中找不到它,那里只有src、target和.gitignore这些文件夹。 - Abdullah Ashraf
@AbdullahAshraf 这不在你的项目中,而是在你的主目录下,例如 /home/user/.cargo/registry/index - Boiethios
@Boiethios 感谢您的帮助。我忘了提到我在使用Windows系统。此外,等待了大约3-5分钟后它就可以工作了。从那以后,就不需要等待了。 - Abdullah Ashraf

71

确保没有其他的rls或cargo在运行非常重要。使用sudo pkill rls cargo可以很好地确保它们不存在。


6
在我的情况中,仅仅是货物处理程序还在运行。杀掉该进程后问题得到了解决。 - gijswijs
2
对我来说,最受欢迎的答案和被接受的答案都不起作用。但是这个方法有效。 - Prajwal
1
这个答案需要置顶。 - Haseeb Saeed
这个帮我省了很多时间,其他答案对我没用,只有这个有效。 - Emad Baqeri
当我运行第二个cargo进程时,同样的问题也导致了我的Cargo.toml元数据文件被锁定,它就一直卡住了。在我发现另一个cargo进程没有响应并终止后,我只需发送信号将其终止,问题就解决了,而无需删除任何锁定文件或整个.cargo文件夹:)。 - undefined

41

对我来说,删除rm $CARGO_HOME/.package-cache解决了我的问题。

我在执行cargo run时意外按下了ctrl+z而不是ctrl+c,然后下一次执行cargo run时显示了阻塞等待注册表索引上的文件锁定。我删除了该文件,然后它就恢复正常了。

编辑:
如果你像我一样意外按下了ctrl+z,你可以通过运行fg而不是删除软件包缓存文件来恢复cargo run进程。实际上,ctrl+z会向进程发送SIGTSTP信号,该进程将被挂起,直到你告诉它继续。有关更多信息,请参见这个答案


我在编译时关闭了我的IDE。这个解决方案修复了我的问题。 - Ramesh Kithsiri HettiArachchi
是的,我在Neovim中输入了“^Z”,可能是在执行“cargo check”(或类似操作)时这样做的。 - Bo Jeanes
这在我的Windows电脑上运行正常。 - nck

31

我在 macOS Monterey 12.4 中使用了这个命令:

rm -rf ~/.cargo/.package-cache

然后重新运行构建命令,就可以了。


1
在我的情况下,这是正确的解决方案。 - Thinsky
我也可以。 - Samuel Santos
这对我也适用。我使用的是Mac 14.0版本。 - undefined

21

当你同时运行cargo build命令两次时,通常会出现此错误。如果你正在使用一个IDE,请检查是否有插件在后台运行cargo命令。我在使用VS Code时就是这种情况。


18

我的问题是IDE正在运行cargo并锁定了目录。尝试关闭您的IDE。


12

我的VSCode智能感知在构建过程中正常工作。请确保您的智能感知没有正在构建。它会在底部显示一个旋转的小齿轮图标。通常发生在更新Cargo.toml时。


12
您可以将IDE指向不同的路径来构建代码,这样可以避免未来的锁冲突。请将以下编译标志添加到IDE中:
--target-dir target/rls/

在VSCode中使用以下设置:
"rust-analyzer.runnables.extraArgs": [
  "--target-dir",
  "target/rls/"
]

enter image description here


这个并没有起到作用,因为Cargo仍然在~/.cargo目录中存储和读取全局软件包缓存,而不是当前项目的目标目录。 - gmoshkin
在Ubuntu 22上,使用Tauri应用程序对我很有效。 - Back2Lobby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接