QGIS Flatpak: No module named pip [Opgelost]
Gepubliceerd op Bijgewerkt op
Voer pip uit via de Flatpak met --devel en installeer met --user. Beide vlaggen zijn nodig: met --devel wissel je de runtime om voor de SDK, waar pip daadwerkelijk staat, en met --user stuur je de bestanden naar een map waarin de sandbox schrijven toestaat.
/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
Alle vier regels komen uit dezelfde sandbox. Je krijgt ze bij het QGIS-pakket van Flathub, org.qgis.qgis, op elke Linux-distributie, zodra een plugin om een Python-pakket vraagt dat niet kan worden gevonden en je naar pip grijpt zoals je dat bij elke andere installatie zou doen.
De snelle oplossing
Lees de SDK-branch die je QGIS Flatpak nodig heeft
Voer flatpak info org.qgis.qgis uit en kijk naar de regel Sdk:. Daar staan een naam en een branch, zoals org.kde.Sdk/x86_64/6.10. Schrijf de branch op. Neem het nummer niet over van deze pagina of uit je foutmelding: de branch verandert bij elke QGIS-release.
Installeer die exacte branch
flatpak install flathub org.kde.Sdk//6.10, met de branch die je zojuist na de dubbele slash hebt gelezen. Elke andere branch installeert zonder fouten en laat je nog steeds achter zonder pip.
Installeer het pakket
flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user
Vervang scipy door wat je plugin ook vraagt. Laat beide vlaggen staan bij elke installatie die je vanaf nu uitvoert.
Controleer of het werkt
Start QGIS opnieuw, open Plugins, daarna Python Console, en typ import scipy. Een lege prompt die terugkomt is het antwoord dat je wilt zien, omdat dit betekent dat QGIS de map leest waarin je hebt geïnstalleerd en dat je plugin het pakket daar ook zal vinden. Een ModuleNotFoundError betekent dat de bestanden ergens terechtkwamen waar QGIS nooit kijkt, ongeacht wat pip tijdens de installatie afdrukte.
Oplossing 2: de bestanden staan buiten het QGIS-zoekpad
Print de map waarnaar pip heeft geschreven:
flatpak run --command=python3 org.qgis.qgis -c "import site; print(site.getusersitepackages())"
Vergelijk deze met sys.path in de QGIS Python Console. Staat die map niet in de lijst, dan kan niets wat daar is geïnstalleerd ooit worden geïmporteerd, hoe netjes pip het succes ook rapporteerde. Het installatielog ziet er van begin tot eind perfect uit en het pakket staat echt op schijf, maar wel buiten de verzameling mappen die deze Python leest bij het starten.
Is de fout ongewijzigd, ga dan naar Oplossing 3.
Oplossing 3: het pakket compileert C-extensies
Je krijgt halverwege de installatie een compilerfout, geen Python-fout. De SDK bevat een compiler, maar niet elke development header, en je kunt er geen van buiten de sandbox aan toevoegen. Geef pip opdracht een source build te weigeren en in plaats daarvan een vooraf gebouwde wheel te gebruiken:
flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user --only-binary=:all:
Bestaat er geen wheel voor jouw platform, zoek dan naar een pakket dat er wel een publiceert.
Is de fout ongewijzigd, ga dan naar Oplossing 4.
Oplossing 4: pip3 ontbreekt nog steeds, ook met --devel
De SDK-installatie is niet gelukt. Controleer de branch met flatpak list | grep Sdk en bouw pip daarna als fallback binnen de sandbox:
flatpak run --command=python3 org.qgis.qgis -m ensurepip --upgrade --user
Beschouw dit uitsluitend als fallback. Geen enkele bron raadt het hier aan en zonder --devel wordt het uitgevoerd tegen de Platform-runtime in plaats van tegen de SDK. Ga daarna terug naar stap 3 van de snelle oplossing.
Is de fout ongewijzigd, ga dan naar Oplossing 5.
Oplossing 5: je gebruikt niet de Flathub-build
Controleer dit met flatpak info org.qgis.qgis. Geeft dat niets terug, dan komt je QGIS ergens anders vandaan en zijn geen van de bovenstaande opdrachten op jou van toepassing. QGIS levert geen officiële Snap-package, dus een Snap-build is afkomstig van een derde partij en heeft zijn eigen sandboxregels. Gebruik op Debian en Ubuntu de officiële QGIS-repository in plaats van Flathub. QGIS gebruikt dan de systeem-Python en plugin-afhankelijkheden worden geïnstalleerd met gewone pip.
Is de fout ongewijzigd, stuur hem dan naar mij. In het onderstaande gedeelte staat wat je in de mail moet zetten.
Waarom dit gebeurt
De Flatpak bevat zijn eigen Python, afgeschermd van de Python die je distributie heeft geïnstalleerd. Daardoor is een pakket dat je met de systeem-pip of met apt hebt toegevoegd onzichtbaar voor QGIS. Binnen de sandbox is /usr aangekoppeld als alleen-lezen. Een gewone pip install probeert daar te schrijven. Dat veroorzaakt de regel [Errno 30] met het python3.11-pad, terwijl --user dezelfde bestanden naar een schrijfbare map stuurt.
Pip zelf staat in de SDK, niet in de runtime die QGIS normaal start. Zonder --devel is er helemaal geen pip3 om uit te voeren, dus de melding komt van bwrap en niet van Python. En --devel werkt alleen wanneer de bijbehorende SDK al op je machine staat. Dat is wat de laatste regel van het foutblok je vertelt.
Onze AI Segmentation plugin herkent een Flatpak-QGIS en verwijst je naar Automatic mode. Die draait op onze servers en installeert geen Python-pakket op je machine.
Nog steeds kapot?
Stuur me drie dingen: de versie van je Flatpak-QGIS uit flatpak info org.qgis.qgis, de exacte opdracht die je hebt uitgevoerd en de volledige uitvoer ervan, niet alleen de laatste regel. Het adres is stephane.barbot@terra-lab.ai. Als het pakket dat je probeert te installeren door onze AI Segmentation plugin is gevraagd, vermeld dat dan in de mail, omdat dit bepaalt naar welke van de vijf oplossingen ik als eerste kijk.
Veelgestelde vragen
Waarom werkt pip wel in mijn terminal, maar niet in QGIS?
De pip in je terminal hoort bij de Python die je distributie heeft geïnstalleerd. De Flatpak heeft zijn eigen Python en geen van beide kan de pakketten van de andere zien. Daardoor laten apt en de systeem-pip QGIS precies zoals het was. Elke installatie moet via flatpak run verlopen, want daarmee plaats je die binnen de sandbox.
Heb ik bij elke installatie --devel nodig?
Ja. pip3 staat in de SDK, niet in de runtime die QGIS start. Zonder --devel is er dus niets om uit te voeren. Laat ook bij elke installatie --user staan, anders schrijf je opnieuw naar een alleen-lezen /usr en krijg je de regel [Errno 30] terug.
Waar komen de pakketten daadwerkelijk terecht?
In de site-directory per gebruiker binnen de sandbox. De opdracht in Oplossing 2 print die voor je. Controleer dat pad tegen sys.path in de QGIS Python Console. Bestanden die buiten elke map in die lijst staan, zal QGIS nooit importeren.
Is er een officiële QGIS Snap die ik in plaats daarvan kan gebruiken?
Nee. snapcraft.io/qgis retourneert een 404 en de build in de Snap-store is afkomstig van een derde partij. De QGIS-documentatie noemt Flatpak, distributiepakketten en Spack. Op Debian of Ubuntu is het alternatief voor Flathub daarom de officiële QGIS-repository, niet Snap.
Zodra imports werken, kun je terug naar de plugins. Onze twee plugins staan op de QGIS AI hub. Windows heeft zijn eigen versie van dit probleem, beschreven in ImportError: DLL load failed while importing _C in QGIS.


