Vai al contenuto
Torna al blog
QGIS
Troubleshooting

"No module named pip" in QGIS Flatpak e "Read-only file system"

"No module named pip" in QGIS Flatpak e "Read-only file system"

Esegui pip tramite Flatpak con --devel e installa con --user: flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user. Se pip non è presente, crealo prima con 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

Si applica al pacchetto QGIS di Flathub, org.qgis.qgis, su qualsiasi distribuzione Linux.

Perché succede

Flatpak include il proprio Python, separato da quello installato dalla tua distribuzione, quindi un pacchetto aggiunto con il pip o apt del sistema non è visibile a QGIS. Nella sandbox, /usr è montato in sola lettura. Questa è la causa della riga [Errno 30]: un semplice pip install prova a scrivere lì, ma l'operazione viene rifiutata. --user invia invece i file a una directory scrivibile.

Pip si trova nell'SDK, non nel runtime con cui QGIS viene normalmente avviato. Senza --devel non c'è alcun pip3 da eseguire, da cui la riga bwrap: execvp. Inoltre, --devel richiede che l'SDK corrispondente sia installato sul computer, come indica l'ultima riga.

La soluzione

Install the SDK that matches your QGIS Flatpak

Leggi la riga Sdk da flatpak info org.qgis.qgis, poi installa esattamente quel branch, ad esempio flatpak install flathub org.kde.Sdk//6.7. Il branch indicato nel messaggio di errore è quello che ti serve.

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

Sostituisci scipy con il pacchetto richiesto dal tuo plugin. Mantieni entrambi i flag: --devel per raggiungere pip, --user per scrivere in una posizione consentita dalla sandbox.

Check QGIS sees it

Riavvia QGIS, apri Plugins, poi Python Console e importa il modulo. Se l'importazione funziona lì, anche il plugin lo troverà.

Se non ha funzionato

  • Trova dove sono finiti effettivamente i file: flatpak run --command=python3 org.qgis.qgis -c "import site; print(site.getusersitepackages())". Confronta il risultato con sys.path nella Python Console di QGIS. Se la directory è assente, nulla di ciò che viene installato lì potrà mai essere importato.
  • Un pacchetto che compila estensioni C può comunque non funzionare. L'SDK include un compilatore, ma non tutti gli header di sviluppo, e non puoi aggiungerne uno dall'esterno della sandbox. Cerca una wheel dello stesso pacchetto.
  • Su Debian e Ubuntu, installa QGIS dal repository ufficiale di QGIS invece che da Flathub. QGIS userà così il Python di sistema e le dipendenze del plugin potranno essere installate con il normale pip.