ready-4 IT

Pylance ou Ruff ? Comprendre les outils, bien les combiner

Pylance vs. Ruff — les questions urgentes, enfin répondues

Ces questions sont apparues en travaillant sur les logs de la console VS Code — elles méritent donc leur place dans le blog, pas seulement dans un chat :

  • python.languageServer va-t-il dans les User Settings ou dans les Workspace Settings ?
  • Qu''est-ce qui est plus moderne : Pylance ou Ruff ? A-t-on encore besoin de Pylance si Ruff est là ?
  • Comment installer Ruff — pour tout le workspace ou pour l''utilisateur ?

Réponse courte : Pylance et Ruff ne sont pas en concurrence. Ils résolvent des problèmes fondamentalement différents et se complètent idéalement. En les combinant correctement, on obtient la configuration Python la plus robuste dans VS Code.

📅 Publié le : 21 mars 2026  ·  © 2026 Nejat Philip Eryigit · ready-4-IT.com

Pylance et Ruff — aperçu des outils complémentaires Compatible Black signifie que Ruff formate le code Python selon exactement les mêmes règles que l'outil populaire Black — guillemets cohérents, longueur de ligne fixe (88 caractères), aucun débat de style. C'est un remplacement direct : si vous utilisiez Black, vous pouvez passer à Ruff sans modifier une seule ligne de code.

TL;DR

Pylance ≠ Ruff. Les deux ensemble = la meilleure configuration.

User Settings (%APPDATA%\Code\User\settings.json) :

{
  "ruff.nativeServer": "on",
  "python.languageServer": "Pylance",
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true
  }
}

Condition préalable : l'extension VS Code charliermarsh.ruff doit être installée. Ce n'est qu'à cette condition que editor.defaultFormatter = charliermarsh.ruff est réellement pris en compte.

Recommandation : insérez ce bloc dans les paramètres utilisateur de VS Code, donc dans %APPDATA%\Code\User\settings.json.

Workspace Settings (.vscode/settings.json dans le projet) :

{
  "python.analysis.typeCheckingMode": "basic",
  "python.analysis.diagnosticMode": "openFilesOnly",
  "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python"
}

Qui fait quoi ? Deux outils — une séparation claire

L'idée reçue la plus répandue : Ruff ne remplace pas Pylance. Ces deux outils résolvent des problèmes fondamentalement différents.

Fonctionnalité Pylance Ruff
IntelliSense / Autocomplétion
Vérification de types (via Pyright)
Aller à la définition
Documentation au survol / Signatures
Linting (flake8, pylint, …) faible
Formatage (compatible Black)
Tri des imports (isort)
Vitesse normale 10–100× plus rapide

Pylance est le serveur de langage — le moteur derrière IntelliSense, l'autocomplétion, la vérification de types et le refactoring. Sans Pylance (ou un serveur équivalent basé sur Pyright), les fichiers Python sont pour ainsi dire du « texte aveugle » pour VS Code.

Ruff est l'outil de linting et de formatage — écrit en Rust, extrêmement rapide, conçu pour remplacer flake8, pylint, isort, pyupgrade et Black. Tout en un seul binaire.


Où vont les paramètres ?

User Settings vs. Workspace Settings — aperçu des portées

Règle d'or : Préférences d'outils (lequel j'utilise ?) → User Settings. Comportement du projet (quelle rigueur ?) → Workspace Settings.

Dans ma configuration, j'utilise volontairement cet allègement globalement dans les User Settings. Pour des équipes ou des dépôts avec des standards très différents, un scope au niveau du workspace peut malgré tout être le meilleur compromis.

Colonnes
python.languageServer
User (global)
Préférence globale — identique pour tous les projets
python.analysis.typeCheckingMode
Workspace
La rigueur varie selon le projet (strict / basic / off)
python.analysis.extraPaths
Workspace
Chemins d'importation spécifiques au projet
python.defaultInterpreterPath
Workspace
Chaque projet utilise son propre venv
python.analysis.diagnosticMode
Workspace
Les workspaces lourds nécessitent "openFilesOnly"
[python] › editor.defaultFormatter
User (global)
Ruff comme formateur par défaut pour tous les fichiers Python

Dans les fichiers de paramètres concrètement

User Settings (%APPDATA%\Code\User\settings.json) :

{
  "ruff.nativeServer": "on",
  "python.languageServer": "Pylance",
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true
  }
}

Ici aussi, la règle est la même : l'affectation du formateur ne fonctionne que si l'extension charliermarsh.ruff est effectivement installée.

Workspace Settings (.vscode/settings.json dans le dossier du projet) :

{
  "python.analysis.typeCheckingMode": "basic",
  "python.analysis.diagnosticMode": "openFilesOnly",
  "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python"
}

Installer Ruff : global ou local ?

Recommandation : les deux — CLI globale + binaire local dans le venv.

Global (pour tous les projets, sans conflit de venv) :

# Avec pipx — recommandé, car isolé :
pipx install ruff

# Ou classiquement en global :
pip install ruff

Local au projet (dans le venv du projet) :

# Dans le venv activé :
pip install ruff

Ou comme dépendance de développement dans pyproject.toml :

[project.optional-dependencies]
dev = ["ruff>=0.4.0"]

Extension VS Code (charliermarsh.ruff)

Condition préalable : l'extension VS Code charliermarsh.ruff doit être installée. La simple affectation editor.defaultFormatter = charliermarsh.ruff ne suffit pas si l'extension est absente.

Entrée recommandée dans les paramètres utilisateur de VS Code (%APPDATA%\Code\User\settings.json) :

Dans ma configuration, le serveur Ruff natif est en plus activé :

{
  "ruff.nativeServer": "on",
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff"
  }
}

L'extension est activée dans les User Settings — une seule fois, globalement. Elle détecte automatiquement la priorité :

  1. Binaire ruff propre au projet dans le venv → prioritaire
  2. ruff installé globalement via pipx
  3. Dernier recours : binaire intégré livré avec l'extension
ext install charliermarsh.ruff

Configuration recommandée 2026

  1. Installer les extensions : ms-python.vscode-pylance + charliermarsh.ruff
  2. Réduire le linting de Pylance (Ruff prend le relais) :
    "python.analysis.diagnosticMode": "openFilesOnly"
  3. Définir Ruff comme formateur (User Settings, une fois, globalement)
  4. Par projet : pyproject.toml ou ruff.toml pour les règles de linting
# pyproject.toml — Configuration Ruff
[tool.ruff]
line-length = 120
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "I", "UP"]  # flake8 + isort + pyupgrade
ignore = ["E501"]                # longueur de ligne gérée par le formateur

Copyright & Date

La date du billet (21 mars 2026) est stockée dans le frontmatter et interprétée par le template. L'auteur et le copyright (© 2026 Nejat Philip Eryigit · ready-4-IT.com) proviennent du fichier global site.yaml et apparaissent dans le pied de page.


Conclusion : Garder Pylance activé — bien configuré

En bref : Ne pas désactiver Pylance — le configurer correctement. Activer et désactiver Pylance « à la demande » génère une charge inutile sans bénéfice réel.

Pylance est le moteur derrière l'IntelliSense, les infobulles, le go-to-definition et le refactoring — les fonctionnalités qui font de VS Code un véritable environnement de développement. Bien configuré, il consomme très peu de ressources supplémentaires.

En permanence dans les User Settings (une fois, globalement)

{
  "ruff.nativeServer": "on",
  "python.languageServer": "Pylance",
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true
  }
}

Dans ma configuration actuelle, ce choix est délibérément défini au niveau utilisateur. Des équipes avec des conventions différentes peuvent préférer un scope plus resserré et garder davantage de règles spécifiques au projet dans .vscode/settings.json.

Par projet dans .vscode/settings.json

{
  "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
  "python.analysis.typeCheckingMode": "basic",
  "python.analysis.diagnosticMode": "openFilesOnly"
}

diagnosticMode: openFilesOnly est le réglage clé pour les projets Python avec de nombreux fichiers ou dépendances externes : Pylance n'analyse que les onglets actuellement ouverts au lieu de parcourir tout le projet en arrière-plan. L'éditeur reste fluide, même dans des projets plus grands.

Quand désactiver Pylance par workspace ?

Uniquement si un workspace n'a pas de venv dédié — par exemple de purs scripts utilitaires sans dépendances de types. Dans ce cas, une surcharge locale au workspace suffit :

{ "python.languageServer": "None" }

Cela désactive Pylance uniquement pour ce workspace, sans toucher au réglage global.

La séparation des tâches reste claire

Tâche Outil Où configurer
IntelliSense, vérification de types, refactoring Pylance User Settings (toujours actif)
Linting, formatage, tri des imports Ruff User Settings (toujours actif)
Rigueur de la vérification de types typeCheckingMode Workspace Settings
Quel venv utiliser defaultInterpreterPath Workspace Settings

flake8, pylint, mypy, isort, Black — plus nécessaires. Ruff les remplace tous.


© 2026 Nejat Philip Eryigit · ready-4-IT.com · Publié le : 21 mars 2026


Support the Journey & Development! 🚀

If my IT guides or the Snapmaker Wiki saved your project (or your hardware), I'd appreciate a coffee! ☕
Your support doesn't just cover hosting and testing costs—it also fuels the development of my apps and tools. Every donation helps me dedicate more time to coding solutions that make our tech-life easier. Thank you for being part of this!

☕ Donate via PayPal