Lewati ke konten
QGIS
Pemecahan Masalah

[Terpecahkan] No module named pip di QGIS Flatpak

Diterbitkan Diperbarui

Jalankan pip melalui Flatpak dengan --devel, dan instal dengan --user. Kedua flag ini penting: --devel menukar runtime dengan SDK, tempat pip benar-benar berada, dan --user mengirim file ke direktori yang diizinkan sandbox untuk Anda tulis.

/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

Keempat baris tersebut berasal dari sandbox yang sama. Anda akan menemukannya pada paket QGIS Flathub, org.qgis.qgis, di distribusi Linux apa pun, saat sebuah plugin meminta paket Python yang tidak dapat ditemukan dan Anda mencoba menggunakan pip seperti pada instalasi lainnya.

Perbaikan cepat

Baca branch SDK yang dibutuhkan QGIS Flatpak Anda

Jalankan flatpak info org.qgis.qgis dan lihat baris Sdk:. Baris tersebut memberikan nama dan branch, seperti org.kde.Sdk/x86_64/6.10. Catat branch tersebut. Jangan menyalin angka dari halaman ini atau dari pesan error Anda: branch berubah pada setiap rilis QGIS.

Instal branch tersebut secara tepat

flatpak install flathub org.kde.Sdk//6.10, dengan branch yang baru saja Anda baca setelah garis miring ganda. Branch lain dapat terinstal dengan bersih dan tetap membuat Anda tidak memiliki pip.

Instal paketnya

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

Ganti scipy dengan apa pun yang diminta plugin Anda. Pertahankan kedua flag pada setiap instalasi yang Anda jalankan mulai sekarang.

Periksa apakah berhasil

Mulai ulang QGIS, buka Plugins, lalu Python Console, dan ketik import scipy. Prompt yang kembali kosong adalah hasil yang Anda inginkan, karena itu berarti QGIS membaca folder tempat Anda menginstal paket dan plugin Anda juga akan menemukannya di sana. ModuleNotFoundError berarti file terpasang di tempat yang tidak pernah dicari QGIS, apa pun yang ditampilkan pip saat bekerja.

Perbaikan 2: file terpasang di luar jalur pencarian QGIS

Tampilkan direktori tempat pip menulis:

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

Bandingkan dengan sys.path di QGIS Python Console. Jika direktori tersebut tidak ada dalam daftar, apa pun yang terinstal di sana tidak akan pernah dapat diimpor, sebersih apa pun laporan keberhasilan pip. Log instalasi terlihat sempurna dari awal hingga akhir, dan paket tersebut benar-benar ada di disk, hanya saja berada di luar kumpulan folder yang dibaca Python ini saat dimulai.

Jika error tidak berubah, lanjutkan ke Perbaikan 3.

Perbaikan 3: paket mengompilasi ekstensi C

Anda mendapatkan error compiler di tengah proses instalasi, bukan error Python. SDK membawa compiler, tetapi tidak membawa setiap header development, dan Anda tidak dapat memberikannya dari luar sandbox. Beri tahu pip untuk menolak source build dan menggunakan wheel siap pakai:

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

Jika tidak ada wheel untuk platform Anda, cari paket yang menerbitkan wheel.

Jika error tidak berubah, lanjutkan ke Perbaikan 4.

Perbaikan 4: pip3 masih tidak ditemukan meski menggunakan --devel

Instalasi SDK tidak berhasil. Konfirmasikan branch dengan flatpak list | grep Sdk, lalu build pip di dalam sandbox sebagai fallback:

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

Perlakukan ini hanya sebagai fallback. Tidak ada sumber yang merekomendasikannya di sini, dan tanpa --devel perintah ini berjalan pada runtime Platform, bukan SDK. Setelah itu, kembali ke langkah 3 pada perbaikan cepat.

Jika error tidak berubah, lanjutkan ke Perbaikan 5.

Perbaikan 5: Anda tidak menggunakan build Flathub

Periksa dengan flatpak info org.qgis.qgis. Jika perintah tersebut tidak mengembalikan apa pun, QGIS Anda berasal dari tempat lain dan tidak satu pun perintah di atas berlaku. QGIS tidak menyediakan paket Snap resmi, jadi build Snap berasal dari pihak ketiga, dengan aturan sandbox-nya sendiri. Di Debian dan Ubuntu, instal dari repositori QGIS resmi alih-alih Flathub. QGIS kemudian menggunakan Python sistem, dan dependensi plugin dapat diinstal dengan pip biasa.

Jika error tidak berubah, kirimkan kepada saya, dan bagian di bawah menjelaskan apa yang harus dicantumkan dalam email.

Mengapa ini terjadi

Flatpak membawa Python-nya sendiri, yang dipisahkan dari Python yang diinstal oleh distribusi Anda, sehingga paket yang Anda tambahkan dengan pip sistem atau dengan apt tidak terlihat oleh QGIS. Di dalam sandbox, /usr dipasang sebagai read-only. pip install biasa mencoba menulis ke sana, yang menghasilkan baris [Errno 30] Read-only file system dengan path python3.11 di dalamnya, sedangkan --user mengirim file yang sama ke direktori yang dapat ditulis.

Pip sendiri berada di SDK, bukan di runtime yang biasanya dijalankan QGIS. Tanpa --devel, tidak ada pip3 yang dapat dijalankan, sehingga keluhan tersebut berasal dari bwrap, bukan dari Python. Dan --devel hanya berfungsi jika SDK yang sesuai sudah ada di mesin Anda, seperti yang diberitahukan oleh baris terakhir pada blok error.

Plugin AI Segmentation kami mendeteksi QGIS Flatpak dan mengarahkan Anda ke Automatic mode, yang berjalan di server kami dan tidak menginstal paket Python apa pun di mesin Anda.

Masih bermasalah?

Kirimkan tiga hal kepada saya: versi QGIS Flatpak Anda dari flatpak info org.qgis.qgis, perintah persis yang Anda jalankan, dan output lengkapnya, bukan hanya baris terakhir. Alamatnya adalah stephane.barbot@terra-lab.ai. Jika paket yang sedang Anda cari diminta oleh plugin AI Segmentation kami, sebutkan dalam email, karena hal itu mengubah perbaikan mana dari lima perbaikan di atas yang saya periksa terlebih dahulu.

Pertanyaan yang sering diajukan

Mengapa pip berfungsi di terminal saya tetapi tidak di QGIS?

Pip di terminal Anda milik Python yang diinstal oleh distribusi Anda. Flatpak memiliki Python-nya sendiri, dan keduanya tidak dapat melihat paket milik satu sama lain, sehingga apt dan pip sistem tidak mengubah kondisi QGIS. Setiap instalasi harus melalui flatpak run, yang menempatkannya di dalam sandbox.

Apakah saya perlu --devel pada setiap instalasi?

Ya. pip3 berada di SDK, bukan di runtime yang dijalankan QGIS, sehingga tanpa --devel tidak ada yang dapat dijalankan. Pertahankan --user pada setiap instalasi juga, atau Anda akan kembali menulis ke /usr yang read-only dan mendapatkan baris [Errno 30] lagi.

Di mana sebenarnya paket-paket tersebut terpasang?

Di direktori site per pengguna di dalam sandbox, yang dicetak oleh perintah pada Perbaikan 2. Periksa path tersebut terhadap sys.path di QGIS Python Console. File yang berada di luar semua folder dalam daftar tersebut tidak akan pernah diimpor oleh QGIS.

Apakah ada QGIS Snap resmi yang dapat saya gunakan?

Tidak. snapcraft.io/qgis mengembalikan 404, dan build di Snap store adalah milik pihak ketiga. Dokumentasi QGIS mencantumkan Flatpak, paket distribusi dan Spack, sehingga di Debian atau Ubuntu alternatif untuk Flathub adalah repositori QGIS resmi, bukan Snap.

Setelah impor berfungsi, Anda dapat kembali ke plugin, dan dua plugin kami tersedia di hub QGIS AI. Windows memiliki versi masalahnya sendiri, yang dibahas dalam ImportError: DLL load failed while importing _C in QGIS.