Introduction : quand la compilation Rust devient un parcours du combattant
\n\nVous avez décidé de compiler Parity (ou tout autre projet Rust complexe) à partir des sources. La commande cargo build est lancée, le terminal reste silencieux, et au bout d'une minute, vous voyez ce message bien connu :
Blocking waiting for file lock on the registry index\n\nLa compilation se bloque complètement. Ctrl+C ne fonctionne pas, redémarrer le terminal non plus. Cela vous dit quelque chose ? Ce problème est l'un des plus populaires sur Stack Overflow (des milliers de vues), et aujourd'hui nous allons le décortiquer en détail.
\n\nDans cet article, en tant que votre guide dans l'univers Rust, je vais vous expliquer :
\n- Pourquoi cette erreur se produit-elle ?
\n- Comment la corriger en 30 secondes ?
\n- Comment éviter qu'elle n'apparaisse ?
\n- Et nous allons jeter un coup d'œil sous le capot de Cargo.
C'est parti ! 🚀
\n\nD'où vient "Blocking waiting for file lock on the registry index" ?
\n\nPour commencer, traduisons cette erreur du langage Cargo en langage humain :
\n\n« Moi, Cargo, je veux télécharger ou mettre à jour la liste des paquets depuis le registre (registry), mais je ne peux pas — le fichier de verrouillage est déjà utilisé par un autre processus. J'attends... »
\n\nDans l'écosystème Rust, cargo utilise des verrous de fichiers (fichiers .lock) pour empêcher deux processus d'écrire simultanément dans le cache du registre (~/.cargo/registry). Cela protège contre la corruption des données, mais parfois le verrou « reste bloqué ».
Principales causes du blocage
\n- \n
- Arrêt brutal d'une compilation précédente — vous avez fermé le terminal, l'ordinateur s'est éteint ou
cargo builda planté avec une erreur, mais le fichier de verrouillage est resté. \n - Deux instances de Cargo dans le même projet — vous avez lancé la compilation dans deux fenêtres de terminal simultanément. \n
- Compilation de Parity à partir des sources — ce projet attire un nombre énorme de dépendances (des centaines de crates), et Cargo peut ralentir lors de l'indexation, surtout sur des machines peu puissantes ou avec une connexion internet lente. \n
- Problèmes de droits d'accès — rare, mais possible lorsque
~/.cargoappartient à un autre utilisateur. \n - Système de fichiers sans support des verrous — par exemple, certains partages réseau ou WSL sans configuration correcte. \n
5 méthodes de résolution (de la plus rapide à la plus fiable)
\n\n🔧 Méthode 1 : Tuer le processus Cargo (la plus rapide)
\nSi vous êtes sûr qu'aucune autre compilation n'est en cours, terminez simplement le processus qui détient le verrou.
\n\nLinux/macOS :
\npkill cargo\n# ou plus radical :\nkillall -9 cargo\n\nWindows (PowerShell) :
\nGet-Process cargo | Stop-Process -Force\n\nEnsuite, relancez cargo build. Dans 80% des cas, cela suffit.
🔧 Méthode 2 : Supprimer manuellement le fichier de verrouillage
\nSi la première méthode n'a pas fonctionné, allez dans le répertoire du registre et supprimez le fichier de verrouillage.
\n\nChemin :
\n# Linux/macOS\nrm -f ~/.cargo/registry/.cache-lock\nrm -f ~/.cargo/registry/.package-cache\n\n# Windows (cmd)\ndel %USERPROFILE%\\.cargo\\registry\\.cache-lock\ndel %USERPROFILE%\\.cargo\\registry\\.package-cache\n\nEnsuite, au prochain lancement, Cargo créera un nouveau fichier de verrouillage. Important : assurez-vous qu'aucun autre processus Cargo n'est en cours d'exécution, sinon vous risquez d'endommager le cache.
\n\n🔧 Méthode 3 : Cargo clean — l'option nucléaire
\nSi rien ne fonctionne, nettoyez tout ce qui a été accumulé. Cela supprimera le dossier target et réinitialisera le cache des dépendances pour le projet en cours. La prochaine compilation sera plus longue, mais propre.
cargo clean\n\nEnsuite, essayez de recompiler le projet :
\ncargo build\n\nCette méthode est particulièrement utile si vous compilez Parity ou un autre projet avec un arbre de dépendances énorme.