Aller au contenu
QGIS
Dépannage

QGIS Flatpak : corriger « No module named pip »

Publié le Mis à jour le

Exécutez pip via le Flatpak avec --devel, puis installez avec --user. Ces deux options sont nécessaires : --devel remplace le runtime par le SDK, qui contient réellement pip, et --user envoie les fichiers dans un répertoire où le sandbox vous autorise à écrire.

/usr/bin/python3: No module named pip

bwrap: execvp pip3: No such file or directory

ERROR: Could not install packages due to an EnvironmentError:
[Errno 30] Read-only file system: '/usr/lib/python3.11/site-packages/urllib3-1.25.9.dist-info'

error: runtime/org.kde.Sdk/x86_64/5.15-22.08 not installed

Ces quatre lignes proviennent du même sandbox. Vous les rencontrez avec le paquet QGIS de Flathub, org.qgis.qgis, sur n'importe quelle distribution Linux, dès qu'un plugin demande un paquet Python introuvable et que vous utilisez pip comme vous le feriez avec une autre installation.

La correction rapide

Relevez la branche du SDK demandée par votre Flatpak QGIS

Exécutez flatpak info org.qgis.qgis et cherchez la ligne Sdk:. Elle fournit un nom et une branche, par exemple org.kde.Sdk/x86_64/6.10. Notez la branche. Ne copiez pas le nombre depuis cette page ou depuis votre message d'erreur : la branche change à chaque nouvelle version de QGIS.

Installez cette branche exacte

flatpak install flathub org.kde.Sdk//6.10, en remplaçant la branche après les deux barres obliques par celle que vous venez de relever. Toute autre branche s'installe correctement et vous laisse quand même sans pip.

Installez le paquet

flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user

Remplacez scipy par le paquet demandé par votre plugin. Conservez les deux options pour toutes les installations que vous effectuerez désormais.

Vérifiez que cela fonctionne

Redémarrez QGIS, ouvrez Extensions > Console Python et saisissez import scipy. Si l'invite revient sans rien afficher, c'est le résultat attendu : QGIS lit le dossier dans lequel vous avez installé le paquet et votre plugin le trouvera lui aussi. Un ModuleNotFoundError signifie que les fichiers sont arrivés dans un emplacement que QGIS ne consulte jamais, quel que soit le résultat affiché par pip pendant l'installation.

Correction 2 : les fichiers sont arrivés en dehors du chemin de recherche de QGIS

Affichez le répertoire dans lequel pip a écrit :

flatpak run --command=python3 org.qgis.qgis -c "import site; print(site.getusersitepackages())"

Comparez-le avec sys.path dans la console Python de QGIS. Si ce répertoire n'apparaît pas dans la liste, rien de ce qui y est installé ne pourra jamais être importé, même si pip a signalé une réussite parfaite. Le journal d'installation semble impeccable du début à la fin et le paquet se trouve bien sur le disque, mais en dehors de l'ensemble des dossiers que ce Python lit au démarrage.

Si l'erreur est inchangée, passez à la correction 3.

Correction 3 : le paquet compile des extensions C

Vous obtenez une erreur de compilateur au milieu de l'installation, pas une erreur Python. Le SDK contient un compilateur, mais pas tous les en-têtes de développement, et vous ne pouvez pas lui en fournir un depuis l'extérieur du sandbox. Demandez à pip de refuser une compilation depuis les sources et de prendre à la place une wheel précompilée :

flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user --only-binary=:all:

S'il n'existe aucune wheel pour votre plateforme, cherchez un paquet qui en publie une.

Si l'erreur est inchangée, passez à la correction 4.

Correction 4 : pip3 manque toujours malgré --devel

L'installation du SDK n'a pas abouti. Confirmez la branche avec flatpak list | grep Sdk, puis construisez pip dans le sandbox comme solution de secours :

flatpak run --command=python3 org.qgis.qgis -m ensurepip --upgrade --user

Considérez ceci comme une solution de secours, rien de plus. Aucune source ne la recommande ici et, sans --devel, elle s'exécute avec le runtime Platform plutôt qu'avec le SDK. Revenez ensuite à l'étape 3 de la correction rapide.

Si l'erreur est inchangée, passez à la correction 5.

Correction 5 : vous n'utilisez pas la version Flathub

Vérifiez avec flatpak info org.qgis.qgis. Si cette commande ne renvoie rien, votre QGIS vient d'une autre source et aucune des commandes ci-dessus ne s'applique. QGIS ne fournit aucun paquet Snap officiel, donc une version Snap provient d'un tiers et possède ses propres règles de sandbox. Sous Debian et Ubuntu, installez QGIS depuis le dépôt officiel QGIS plutôt que depuis Flathub. QGIS utilisera alors le Python du système et les dépendances des plugins s'installeront avec un pip classique.

Si l'erreur est inchangée, envoyez-la-moi ; la section ci-dessous indique quoi mettre dans le mail.

Pourquoi cela se produit

Le Flatpak embarque son propre Python, isolé de celui installé par votre distribution. Un paquet ajouté avec le pip du système ou avec apt est donc invisible pour QGIS. Dans le sandbox, /usr est monté en lecture seule. Une commande pip install classique essaie d'y écrire, ce qui produit la ligne [Errno 30] avec le chemin python3.11, tandis que --user envoie les mêmes fichiers vers un répertoire accessible en écriture.

Pip lui-même se trouve dans le SDK, pas dans le runtime que QGIS démarre normalement. Sans --devel, il n'y a aucun pip3 à exécuter, et la plainte vient donc de bwrap plutôt que de Python. De plus, --devel ne fonctionne que si le SDK correspondant est déjà installé sur votre machine, ce que vous indique la dernière ligne du bloc d'erreur.

Notre plugin AI Segmentation détecte un QGIS Flatpak et vous oriente vers le mode Automatique, qui s'exécute sur nos serveurs et n'installe aucun paquet Python sur votre machine.

Toujours bloqué ?

Envoyez-moi trois éléments : la version de votre QGIS Flatpak obtenue avec flatpak info org.qgis.qgis, la commande exacte que vous avez exécutée et l'intégralité de sa sortie, pas uniquement la dernière ligne. L'adresse est stephane.barbot@terra-lab.ai. Si le paquet recherché a été demandé par notre plugin AI Segmentation, précisez-le dans le mail, car cela modifie la correction que j'examinerai en premier parmi les cinq proposées ci-dessus.

Questions fréquentes

Pourquoi pip fonctionne-t-il dans mon terminal mais pas dans QGIS ?

Le pip de votre terminal appartient au Python installé par votre distribution. Le Flatpak possède le sien et aucun des deux ne peut voir les paquets de l'autre. apt et le pip du système laissent donc QGIS exactement dans son état initial. Chaque installation doit passer par flatpak run, qui l'exécute à l'intérieur du sandbox.

Dois-je utiliser --devel pour chaque installation ?

Oui. pip3 se trouve dans le SDK, pas dans le runtime démarré par QGIS. Sans --devel, il n'y a donc rien à exécuter. Conservez également --user pour chaque installation, sinon vous écrirez de nouveau dans /usr, qui est en lecture seule, et vous reverrez la ligne [Errno 30].

Où les paquets sont-ils réellement installés ?

Dans le répertoire site-packages de l’utilisateur à l’intérieur du sandbox, que la commande de la correction 2 affiche pour vous. Comparez ce chemin avec sys.path dans la console Python de QGIS. Les fichiers situés en dehors de tous les dossiers de cette liste ne seront jamais importés par QGIS.

Existe-t-il un Snap QGIS officiel que je pourrais utiliser à la place ?

Non. snapcraft.io/qgis renvoie une erreur 404 et la version présente dans la boutique Snap provient d'un tiers. La documentation QGIS liste Flatpak, les paquets des distributions et Spack. Sous Debian ou Ubuntu, l'alternative à Flathub est donc le dépôt officiel QGIS, pas Snap.

Une fois les imports fonctionnels, vous pourrez retourner à vos plugins ; les deux nôtres se trouvent sur le hub QGIS AI. Windows connaît sa propre version de ce problème, décrite dans ImportError: DLL load failed while importing _C in QGIS.