Aller au contenu
QGIS
Tutoriel

PyQGIS : automatiser QGIS avec Python, avec ou sans code

Publié le

PyQGIS est la façon de piloter QGIS avec du code Python. Tout ce que vous faites au clic dans QGIS, vous pouvez l’écrire en quelques lignes de Python : charger une couche, lancer un outil, modifier un style, exporter une carte. Vous répétez ainsi le même travail sur cent fichiers sans cliquer cent fois. PyQGIS est livré avec chaque installation de QGIS, donc il n’y a rien à ajouter.

QGIS avec la console Python ouverte sous une carte du centre de Denpasar, à Bali. L’éditeur à droite contient un script nommé school_zones.py qui reprojette les écoles, trace des zones de 100 m autour d’elles et sélectionne les bâtiments qui s’y trouvent. La sortie à gauche indique 864 of 7015 buildings are within 100 m of a school, puis yes 818, school 19, commercial 15, college 5. La carte montre les zones autour des écoles sous forme de cercles bleus et les bâtiments sélectionnés en orange.
La console Python de QGIS. Ce script trouve les bâtiments situés à moins de 100 m d’une école : 864 sur 7 015 dans le centre de Denpasar.

Le PyQGIS Developer Cookbook explique que les outils Python sont « presque identiques » à ceux avec lesquels QGIS lui-même est construit, donc presque tout est possible. La plupart des plugins QGIS, les nôtres compris, sont écrits avec PyQGIS.

Vous n’avez plus besoin d’écrire le code vous-même. Un chatbot peut le rédiger, et un agent peut même s’en passer : nous en développons un, AI Agent, et plus bas je teste les deux sur les mêmes six tâches.

Où exécuter PyQGIS

Il y a quatre endroits, et chacun convient à un usage différent.

OùComment l’ouvrirÀ utiliser pour
Console PythonExtensions > Console Python (Ctrl+Alt+P)Des corrections rapides sur le projet ouvert
Script de traitementBoîte à outils de traitements > Scripts > Créer un nouveau script depuis un modèle…Un outil réutilisable avec ses propres paramètres, comme n’importe quel autre outil de la boîte à outils
PluginUn dossier dans votre profil QGISUn outil avec ses propres boutons, à partager avec d’autres
Script autonomeDu Python classique, ou la commande qgis_processLes tâches qui tournent sans fenêtre QGIS, par exemple sur un serveur

La console vous donne iface, l’objet qui contrôle la fenêtre de QGIS. En dehors de QGIS, il n’existe pas : c’est pourquoi NameError: name 'iface' is not defined est l’une des questions PyQGIS les plus posées sur GIS Stack Exchange.

Un script de traitement part d’un modèle que QGIS remplit pour vous. Vous modifiez les paramètres d’entrée et les quelques lignes qui font le travail, puis le script apparaît dans la boîte à outils comme un outil natif.

L’éditeur de scripts de traitement de QGIS affichant le début du modèle : une classe nommée ExampleProcessingAlgorithm, avec des commentaires expliquant qu’elle prend une couche vectorielle et en crée une identique, les constantes INPUT et OUTPUT, et une méthode name qui renvoie myscript.
Créer un nouveau script depuis un modèle ouvre un exemple fonctionnel à modifier.

Votre premier script PyQGIS

Ouvrez la console Python, cliquez sur Afficher l’éditeur, sélectionnez une couche de bâtiments dans le panneau Couches, puis collez ce code. Il compte les bâtiments de chaque type :

from collections import Counter

layer = iface.activeLayer()  # the layer selected in the Layers panel
counts = Counter(f["building"] for f in layer.getFeatures())

for kind, n in counts.most_common(5):
    print(kind, n)
print("Total:", layer.featureCount(), "features in", layer.crs().authid())

Trois objets font l’essentiel du travail : QgsProject.instance() est votre projet, QgsVectorLayer et QgsRasterLayer sont ses couches, et iface est la fenêtre. La référence de l’API liste toutes les classes.

Lancer n’importe quel outil QGIS depuis Python

Chaque outil de la boîte à outils de traitements peut se lancer en une ligne de Python, processing.run(), avec les mêmes paramètres que sa fenêtre :

import processing

result = processing.run("native:buffer", {
    "INPUT": "buildings.gpkg",
    "DISTANCE": 50,
    "OUTPUT": "buffered.gpkg",
})

Inutile de deviner le nom des paramètres. Remplissez une fois la fenêtre de l’outil, puis ouvrez Avancé > Copier en tant que commande Python en bas. QGIS vous donne la ligne exacte à coller dans votre script.

La fenêtre de l’outil Compter les points dans les polygones de QGIS, avec kelurahan comme polygones et schools comme points. Le menu Avancé en bas est ouvert, avec Copier en tant que commande Python en surbrillance, au-dessus de Copier en tant que commande qgis_process, Copier en tant que JSON et Coller les paramètres.
Copier en tant que commande Python transforme tout outil réglé à la main en ligne de code.

Les mêmes outils se lancent sans ouvrir QGIS, depuis un terminal, avec qgis_process run native:buffer. C’est la solution pour une tâche planifiée sur un serveur.

Ce que QGIS 4 change pour PyQGIS

QGIS 4.0, sorti le 6 mars 2026, est passé à une version plus récente de Qt, la bibliothèque qui construit ses fenêtres et ses boutons. Les fonctions de QGIS sont restées presque identiques. Ce qui casse, c’est le code qui touche directement à Qt, et trois changements en causent l’essentiel :

QGIS 3QGIS 4
Des noms courts comme Qt.AlignLeftDes noms complets, comme Qt.AlignmentFlag.AlignLeft
QRegExpQRegularExpression
exec_() sur les boîtes de dialogueexec()

QGIS fournit un script, pyqt5_to_pyqt6.py, qui réécrit la plupart de ces éléments à votre place, et le pyqgis4-checker repère le reste. Les scripts qui n’utilisent que des outils QGIS et processing.run() fonctionnent en général sans modification.

ChatGPT ou Claude peuvent-ils écrire du PyQGIS pour vous ?

Le plus souvent oui, à condition de lui décrire votre projet. J’ai testé Claude Sonnet, un chatbot comme ChatGPT : ses scripts se sont exécutés sans erreur sur les six tâches. Quand je décrivais les couches, les champs et les chemins de fichiers, les six résultats étaient justes. Quand je ne donnais que le nom des couches, l’un des six était faux sans que rien ne le montre : le script tournait, n’affichait rien d’inquiétant, et remplissait 396 pixels sur 936 d’un modèle d’élévation avec une fausse altitude de 0 m.

Exécuté sans erreurRésultat correct
Chatbot, projet décrit dans le prompt6 sur 66 sur 6
Chatbot, noms de couches seulement6 sur 65 sur 6
Agent IA dans QGIS, phrase de tâche seule6 sur 66 sur 6

La leçon est simple. Un chatbot ne voit pas votre projet : la qualité de son code dépend donc de la précision de votre description, et un résultat faux peut ressembler exactement à un résultat juste. Il y avait aussi un piège propre à QGIS 4 : les deux scripts de mise en page du chatbot utilisaient les noms Qt courts du tableau ci-dessus, et ils s’arrêteraient en cours de route sous QGIS 4.

Comment nous avons mesuré. Le 26 septembre 2026, dans QGIS 3.44.7, avec des données cartographiques du centre de Denpasar, à Bali : six tâches courantes, du comptage de bâtiments à l’export d’une mise en page, une seule tentative chacune. Un résultat n’était compté juste que si un script de contrôle distinct, écrit avant les essais, le validait. Six tâches, c’est un petit échantillon.

Ou sans code : un agent qui exécute les étapes

Nous développons AI Agent : cette section parle donc de notre propre plugin. C’est un panneau de discussion dans QGIS : vous écrivez la tâche, et il lit votre projet, lance les outils et vérifie le résultat. Il n’y a pas de code à coller ni de projet à décrire.

Je lui ai donné les mêmes six phrases de tâche, sans aucune description du projet. Il a réussi les six, en 6,4 à 42,8 secondes par tâche, et 148,8 secondes pour l’ensemble. Il s’est arrêté deux fois pour demander avant d’écrire un fichier, et j’ai cliqué sur Autoriser. Sur la tâche d’élévation qui avait fait trébucher le chatbot, il a d’abord lu la couche et a correctement traité les pixels vides.

QGIS avec le panneau AI Agent à droite. La demande est d’appliquer à la couche des bâtiments un style selon le champ building : commercial en rouge, école en bleu, hôtel en vert, maison en violet et toutes les autres valeurs en gris clair. L’agent indique qu’il a appliqué le style aux bâtiments et vérifié chaque catégorie. La carte de Denpasar montre des bâtiments commerciaux rouges, un hôtel vert et une maison violette parmi des bâtiments gris, et le panneau Couches liste les cinq catégories.
Une phrase, et les bâtiments sont stylisés par type. Aucun code à lire ni à coller.

La voie gratuite reste une bonne option : la console, Copier en tant que commande Python et un chatbot vous mèneront loin, à condition de vérifier le résultat. Si vous préférez décrire la tâche et obtenir la couche, l’agent fait les étapes à votre place.

Essayer AI Agent gratuitement dans QGIS, sans carte bancaire

Là où les gens bloquent

Nous avons compté les questions sous les tutoriels QGIS sur YouTube : sur 1 692 tutoriels avec des commentaires, 391 commentaires répartis sur 245 tutoriels demandent de l’aide sur Python ou l’automatisation. Les trois mêmes problèmes reviennent :

  • Couche introuvable. mapLayersByName("roads") ne trouve rien si le nom diffère d’une lettre ou d’un espace.
  • Distances en degrés. Un tampon de 50 m sur une couche en EPSG:4326 est un tampon de 50 degrés, car ce système compte en degrés. Reprojetez d’abord, comme l’explique l’article sur ce qu’est un SCR.
  • iface hors de QGIS. Les scripts exécutés hors de la fenêtre n’ont pas d’iface. Utilisez plutôt QgsProject et processing.run().

À retenir

PyQGIS est l’interface Python de QGIS. Il fonctionne dans la console Python, dans les scripts de traitement, dans les plugins, et hors de QGIS avec qgis_process.

processing.run() lance n’importe quel outil QGIS depuis du code, et Copier en tant que commande Python vous donne la ligne exacte depuis la fenêtre d’un outil.

QGIS 4 a renommé certains noms Qt, comme Qt.AlignLeft. Le code qui construit ses propres fenêtres peut demander de petites corrections.

Dans notre test de six tâches, le code du chatbot s’exécutait toujours mais était faux une fois, quand le projet n’était pas décrit. Un agent dans QGIS, comme AI Agent, a réussi les six à partir de la seule phrase de tâche.

Questions fréquentes

À quoi sert PyQGIS ?

À automatiser QGIS avec Python : charger et modifier des couches, lancer des outils sur de nombreux fichiers, styliser des cartes, construire des mises en page, et écrire des plugins ou des scripts que d’autres peuvent réutiliser. PyQGIS fonctionne aussi hors de la fenêtre QGIS, pour des tâches sur un serveur.

PyQGIS, est-ce la même chose que Python ?

PyQGIS est un ensemble d’outils QGIS que l’on utilise depuis Python. Vous écrivez du Python normal, et PyQGIS ajoute des éléments comme QgsVectorLayer et processing.run(). Il est livré avec QGIS et utilise le Python que QGIS installe.

Comment ouvrir la console Python dans QGIS ?

Par Extensions > Console Python, ou avec Ctrl+Alt+P. Cliquez sur Afficher l’éditeur pour écrire des scripts plus longs, les enregistrer en fichiers .py et les lancer avec la flèche verte.

Mes scripts PyQGIS fonctionnent-ils encore dans QGIS 4 ?

Les scripts qui n’utilisent que des outils QGIS et processing.run() fonctionnent en général. Ceux qui construisent leurs propres fenêtres demandent souvent de petites modifications, comme Qt.AlignmentFlag.AlignLeft à la place de Qt.AlignLeft. Le script officiel pyqt5_to_pyqt6.py en corrige la plupart.

Peut-on automatiser QGIS sans Python ?

Oui. Le modeleur graphique enchaîne les outils visuellement, et le traitement par lot lance un outil sur de nombreux fichiers. Un plugin d’agent IA va plus loin : vous écrivez la tâche en langage courant et il lance les outils dans votre projet. Le nôtre, AI Agent, a une offre gratuite.

Pour aller plus loin, ce qu’est un agent IA dans QGIS explique comment fonctionnent les agents et lequel choisir, et AI Agent est le nôtre, à essayer gratuitement. Ce qu’est un SCR couvre la reprojection dont la plupart des scripts ont besoin en premier, et ce qu’est QGIS MCP présente la voie pour les utilisateurs de Claude Code et de Cursor.