Ga naar inhoud
Terug naar blog
QGIS
Troubleshooting

No module named pip in QGIS Flatpak oplossen: Read-only file system

No module named pip in QGIS Flatpak oplossen: Read-only file system

Voer pip via Flatpak uit met --devel en installeer met --user: flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user. Als pip zelf ontbreekt, maak het dan eerst aan met flatpak run --command=python3 org.qgis.qgis -m ensurepip --upgrade --user.

/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

Dit geldt voor het QGIS-pakket van Flathub, org.qgis.qgis, op elke Linux-distributie.

Waarom dit gebeurt

Flatpak bevat zijn eigen Python, los van de Python die je distributie heeft geïnstalleerd. Daardoor is een pakket dat je met de systeemversie van pip of apt hebt toegevoegd, onzichtbaar voor QGIS. In de sandbox is /usr als alleen-lezen gekoppeld. Dat veroorzaakt de regel [Errno 30]: een gewone pip install probeert daar te schrijven en wordt geweigerd. Met --user worden de bestanden naar een beschrijfbare map gestuurd.

Pip bevindt zich in de SDK, niet in de runtime waarmee QGIS normaal start. Zonder --devel is er geen pip3 om uit te voeren, wat de regel bwrap: execvp veroorzaakt. En voor --devel moet de overeenkomende SDK op je machine zijn geïnstalleerd. Dat is de laatste regel.

De oplossing

Install the SDK that matches your QGIS Flatpak

Lees de Sdk-regel uit flatpak info org.qgis.qgis en installeer vervolgens exact die branch, bijvoorbeeld flatpak install flathub org.kde.Sdk//6.7. De branch in de foutmelding is de branch die je nodig hebt.

Make sure pip exists

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

Install the package

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

Vervang scipy door wat je plugin nodig heeft. Behoud beide flags: --devel om pip te bereiken en --user om te schrijven naar een locatie die de sandbox toestaat.

Check QGIS sees it

Start QGIS opnieuw, open Plugins en daarna Python Console, en importeer de module. Als de import daar werkt, kan de plugin deze ook vinden.

Als dit niet heeft gewerkt

  • Zoek waar de bestanden daadwerkelijk terecht zijn gekomen: flatpak run --command=python3 org.qgis.qgis -c "import site; print(site.getusersitepackages())". Vergelijk dit met sys.path in de QGIS Python Console. Als de map ontbreekt, zal niets wat daar is geïnstalleerd ooit kunnen worden geïmporteerd.
  • Een pakket dat C-extensies compileert, kan nog steeds mislukken. De SDK heeft een compiler, maar niet elke development-header, en je kunt er geen van buiten de sandbox toevoegen. Zoek naar een wheel-build van hetzelfde pakket.
  • Installeer QGIS op Debian en Ubuntu vanuit de officiële QGIS-repository in plaats van Flathub. QGIS gebruikt dan de systeem-Python en plugin-afhankelijkheden worden met gewone pip geïnstalleerd.