Cargo build bloqué : "Blocking waiting for file lock" — comment le réparer

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : quand la compilation Rust devient un parcours du combattant

\n\n

Vous 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 :

\n\n
Blocking waiting for file lock on the registry index
\n\n

La 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\n

Dans 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.

\n\n

C'est parti ! 🚀

\n\n

D'où vient "Blocking waiting for file lock on the registry index" ?

\n\n

Pour 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\n

Dans 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é ».

\n\n

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 build a 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 ~/.cargo appartient à un autre utilisateur.
  • \n
  • Système de fichiers sans support des verrous — par exemple, certains partages réseau ou WSL sans configuration correcte.
  • \n
\n\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)

\n

Si vous êtes sûr qu'aucune autre compilation n'est en cours, terminez simplement le processus qui détient le verrou.

\n\n

Linux/macOS :

\n
pkill cargo\n# ou plus radical :\nkillall -9 cargo
\n\n

Windows (PowerShell) :

\n
Get-Process cargo | Stop-Process -Force
\n\n

Ensuite, relancez cargo build. Dans 80% des cas, cela suffit.

\n\n

🔧 Méthode 2 : Supprimer manuellement le fichier de verrouillage

\n

Si la première méthode n'a pas fonctionné, allez dans le répertoire du registre et supprimez le fichier de verrouillage.

\n\n

Chemin :

\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\n

Ensuite, 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

\n

Si 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.

\n\n
cargo clean
\n\n

Ensuite, essayez de recompiler le projet :

\n
cargo build
\n\n

Cette méthode est particulièrement utile si vous compilez Parity ou un autre projet avec un arbre de dépendances énorme.

Blogs

Book Recommendations