Saltar al contenido
QGIS
Troubleshooting

QGIS Flatpak: No module named pip (resuelto)

Publicado el Actualizado el

Ejecuta pip mediante Flatpak con --devel e instala con --user. Ambas opciones son necesarias: --devel cambia el runtime por el SDK, donde realmente se encuentra pip, y --user envía los archivos a un directorio en el que el sandbox permite escribir.

/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

Las cuatro líneas proceden del mismo sandbox. Te las encontrarás en el paquete QGIS de Flathub, org.qgis.qgis, en cualquier distribución de Linux, en cuanto un plugin solicite un paquete de Python que no encuentra y recurras a pip como harías con cualquier otra instalación.

La solución rápida

Consulta la rama del SDK que necesita tu QGIS Flatpak

Ejecuta flatpak info org.qgis.qgis y busca la línea Sdk:. Indica un nombre y una rama, como org.kde.Sdk/x86_64/6.10. Anota la rama. No copies el número de esta página ni del mensaje de error: la rama cambia con cada versión de QGIS.

Instala esa rama exacta

flatpak install flathub org.kde.Sdk//6.10, usando después de las dos barras la rama que acabas de consultar. Cualquier otra rama se instala correctamente y aun así te deja sin pip.

Instala el paquete

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

Sustituye scipy por lo que solicite tu plugin. Mantén ambas opciones en todas las instalaciones que ejecutes a partir de ahora.

Comprueba que funciona

Reinicia QGIS, abre Plugins, después Python Console y escribe import scipy. Que vuelva a aparecer una solicitud vacía es la respuesta que buscas, porque significa que QGIS lee la carpeta en la que instalaste el paquete y que tu plugin también lo encontrará allí. Un ModuleNotFoundError significa que los archivos acabaron en un lugar que QGIS nunca consulta, independientemente de lo que pip imprimiera mientras trabajaba.

Solución 2: los archivos quedaron fuera de la ruta de búsqueda de QGIS

Muestra el directorio en el que pip escribió:

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

Compáralo con sys.path en la Python Console de QGIS. Si ese directorio no aparece en la lista, nada de lo que se haya instalado allí podrá importarse, por muy correctamente que pip informara del éxito. El registro de instalación parece perfecto de principio a fin y el paquete realmente está en el disco, pero fuera del conjunto de carpetas que este Python lee al iniciarse.

Si el error no cambia, pasa a la solución 3.

Solución 3: el paquete compila extensiones de C

Obtienes un error del compilador a mitad de la instalación, no un error de Python. El SDK incluye un compilador, pero no todos los encabezados de desarrollo, y no puedes proporcionarle uno desde fuera del sandbox. Indica a pip que rechace una compilación desde el código fuente y que use un wheel precompilado:

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

Si no existe ningún wheel para tu plataforma, busca un paquete que publique uno.

Si el error no cambia, pasa a la solución 4.

Solución 4: pip3 sigue sin estar disponible incluso con --devel

La instalación del SDK no se realizó. Confirma la rama con flatpak list | grep Sdk y después crea pip dentro del sandbox como solución alternativa:

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

Trátalo únicamente como una solución alternativa. Ninguna fuente lo recomienda aquí y, sin --devel, se ejecuta contra el runtime de Platform en lugar del SDK. Después vuelve al paso 3 de la solución rápida.

Si el error no cambia, pasa a la solución 5.

Solución 5: no estás usando la versión de Flathub

Compruébalo con flatpak info org.qgis.qgis. Si no devuelve nada, tu QGIS procede de otro lugar y ninguno de los comandos anteriores se aplica. QGIS no ofrece ningún paquete Snap oficial, así que una versión Snap es de terceros y tiene sus propias reglas de sandbox. En Debian y Ubuntu, instala desde el repositorio oficial de QGIS en lugar de Flathub. QGIS usará entonces el Python del sistema y las dependencias del plugin se instalarán con pip normal.

Si el error no cambia, envíamelo y la sección siguiente explica qué incluir en el correo.

Por qué ocurre

Flatpak incluye su propio Python, aislado del que instaló tu distribución, por lo que un paquete que añadiste con el pip del sistema o con apt es invisible para QGIS. Dentro del sandbox, /usr está montado como solo lectura. Un pip install normal intenta escribir allí, lo que produce la línea [Errno 30] con la ruta python3.11, mientras que --user envía esos mismos archivos a un directorio escribible.

Pip se encuentra en el SDK, no en el runtime que QGIS inicia normalmente. Sin --devel no hay ningún pip3 que ejecutar, así que la queja procede de bwrap y no de Python. Además, --devel solo funciona cuando el SDK correspondiente ya está en tu máquina, que es lo que indica la última línea del bloque de error.

Nuestro plugin de AI Segmentation detecta un QGIS Flatpak y te dirige al modo Automatic, que se ejecuta en nuestros servidores y no instala ningún paquete de Python en tu máquina.

¿Sigue sin funcionar?

Envíame tres cosas: la versión de tu QGIS Flatpak obtenida con flatpak info org.qgis.qgis, el comando exacto que ejecutaste y toda su salida, no solo la última línea. La dirección es stephane.barbot@terra-lab.ai. Si el paquete que buscas te lo solicitó nuestro plugin de AI Segmentation, indícalo en el correo, porque eso cambia cuál de las cinco soluciones reviso primero.

Preguntas frecuentes

¿Por qué pip funciona en mi terminal, pero no en QGIS?

El pip de tu terminal pertenece al Python que instaló tu distribución. Flatpak tiene el suyo propio y ninguno puede ver los paquetes del otro, así que apt y el pip del sistema dejan QGIS exactamente como estaba. Cada instalación debe pasar por flatpak run, que es lo que la sitúa dentro del sandbox.

¿Necesito --devel en cada instalación?

Sí. pip3 se encuentra en el SDK, no en el runtime que inicia QGIS, así que sin --devel no hay nada que ejecutar. Mantén también --user en todas las instalaciones, o volverás a escribir en un /usr de solo lectura y reaparecerá la línea [Errno 30].

¿Dónde acaban realmente los paquetes?

En el directorio de sitio por usuario dentro del sandbox, que el comando de la solución 2 muestra. Comprueba esa ruta frente a sys.path en la Python Console de QGIS. Los archivos que estén fuera de todas las carpetas de esa lista nunca serán importados por QGIS.

¿Existe un Snap oficial de QGIS que pueda usar?

No. snapcraft.io/qgis devuelve un 404 y la versión de la tienda Snap es de terceros. La documentación de QGIS enumera Flatpak, paquetes de distribución y Spack, así que en Debian o Ubuntu la alternativa a Flathub es el repositorio oficial de QGIS, no Snap.

Cuando las importaciones funcionen, podrás volver a los plugins. Los dos nuestros viven en el hub de QGIS AI. Windows tiene su propia versión de este problema, explicada en ImportError: DLL load failed while importing _C in QGIS.