Przejdź do treści
Wróć do bloga
QGIS
Troubleshooting

QGIS Flatpak: No module named pip i system plików tylko do odczytu

QGIS Flatpak: No module named pip i system plików tylko do odczytu

Uruchom pip przez Flatpak z --devel i instaluj z --user: flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user. Jeśli brakuje samego pip, utwórz go najpierw za pomocą 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

Dotyczy pakietu QGIS z Flathub, org.qgis.qgis, na każdej dystrybucji Linux.

Dlaczego tak się dzieje

Flatpak zawiera własnego Pythona, niezależnego od tego, który został zainstalowany w Twojej dystrybucji, dlatego pakiet dodany za pomocą systemowego pip lub apt jest niewidoczny dla QGIS. W piaskownicy /usr jest zamontowany jako tylko do odczytu, co powoduje błąd [Errno 30]: zwykłe pip install próbuje tam zapisać dane i zostaje odrzucone. --user kieruje pliki do zapisywalnego katalogu.

Pip znajduje się w SDK, a nie w runtime QGIS, z którym QGIS jest zwykle uruchamiany. Bez --devel nie ma pip3, który można uruchomić, stąd komunikat bwrap: execvp. Z kolei --devel wymaga zainstalowania na komputerze pasującego SDK, co wyjaśnia ostatnią linię.

Rozwiązanie

Zainstaluj SDK pasujące do QGIS Flatpak

Odczytaj wiersz Sdk z flatpak info org.qgis.qgis, a następnie zainstaluj dokładnie tę gałąź, na przykład flatpak install flathub org.kde.Sdk//6.7. Gałąź z komunikatu błędu to ta, której potrzebujesz.

Upewnij się, że pip istnieje

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

Zainstaluj pakiet

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

Zastąp scipy pakietem wymaganym przez Twój plugin. Zachowaj obie flagi: --devel, aby uzyskać dostęp do pip, oraz --user, aby zapisać pliki w miejscu dozwolonym przez piaskownicę.

Sprawdź, czy QGIS go widzi

Uruchom ponownie QGIS, otwórz Wtyczki, a następnie Konsolę Python i zaimportuj moduł. Jeśli import działa tam, plugin również go znajdzie.

Jeśli to nie zadziałało

  • Sprawdź, gdzie faktycznie trafiły pliki: flatpak run --command=python3 org.qgis.qgis -c "import site; print(site.getusersitepackages())". Porównaj tę ścieżkę z sys.path w Konsoli Python QGIS. Jeśli katalogu nie ma na liście, nic, co zostało tam zainstalowane, nie będzie się importować.
  • Pakiet kompilujący rozszerzenia C może nadal nie działać. SDK zawiera kompilator, ale nie każdy nagłówek programistyczny, a spoza piaskownicy nie możesz go dodać. Poszukaj gotowego wheel dla tego samego pakietu.
  • W Debianie i Ubuntu zainstaluj QGIS z oficjalnego repozytorium QGIS zamiast z Flathub. QGIS będzie wtedy używać systemowego Pythona, a zależności pluginu zainstalujesz zwykłym pip.