[解決済み] QGIS FlatpakでNo module named pipが出る対処法
公開日 更新日
Flatpak では --devel 経由で pip を実行し、--user でインストールします。どちらのフラグにも理由があります。--devel は pip が実際に存在する SDK に runtime を切り替え、--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
この4行はすべて同じサンドボックスから出ています。Flathub の QGIS パッケージ org.qgis.qgis を、どの Linux ディストリビューションで使っている場合でも、plugin が見つけられない Python パッケージを要求し、通常のインストールと同じように pip を使おうとした瞬間に遭遇します。
まず試す解決策
QGIS Flatpakが必要とするSDKブランチを確認する
flatpak info org.qgis.qgis を実行し、Sdk: の行を確認します。org.kde.Sdk/x86_64/6.10 のように、名前とブランチが表示されます。ブランチを書き留めてください。このページやエラーメッセージにある数字をコピーしないでください。ブランチは QGIS のリリースごとに変わります。
その正確なブランチをインストールする
flatpak install flathub org.kde.Sdk//6.10 を実行します。ダブルスラッシュの後ろには、先ほど確認したブランチを指定してください。別のブランチをインストールすると正常に完了しても、pip がない状態は変わりません。
パッケージをインストールする
flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user
scipy を、plugin が要求しているパッケージに置き換えます。これ以降に実行するすべてのインストールで、2つのフラグを付けたままにしてください。
動作を確認する
QGIS を再起動し、Plugins、次に Python Console を開いて、import scipy と入力します。空のプロンプトが返れば求めていた結果です。QGIS がインストール先のフォルダーを読み取り、plugin もそこからパッケージを見つけられることを意味します。ModuleNotFoundError が表示される場合、pip が動作中に何を出力していたとしても、ファイルは QGIS が決して探さない場所に置かれています。
エラーが変わらなければ、Fix 3 に進みます。
Fix 2: ファイルがQGISの検索パス外に置かれた
pip が書き込んだディレクトリを表示します。
flatpak run --command=python3 org.qgis.qgis -c "import site; print(site.getusersitepackages())"
QGIS Python Console で sys.path と比較します。そのディレクトリがリストにない場合、そこにインストールされたものは、pip がどれほどきれいに成功を報告しても、決して import されません。インストールログは最初から最後まで完璧に見え、パッケージも実際にディスク上にあります。ただし、起動時にこの Python が読み取るフォルダーの集合の外側にあります。
エラーが変わらなければ、Fix 3 に進みます。
Fix 3: パッケージがC拡張をコンパイルする
Python のエラーではなく、インストール途中でコンパイラーエラーが発生します。SDK にはコンパイラーが含まれていますが、すべての開発用ヘッダーがあるわけではなく、サンドボックスの外から渡すこともできません。pip にソースビルドを拒否させ、代わりにビルド済みの wheel を使用します。
flatpak run --devel --command=pip3 org.qgis.qgis install scipy --user --only-binary=:all:
使用しているプラットフォーム用の wheel が存在しない場合は、wheel を公開しているパッケージを探してください。
エラーが変わらなければ、Fix 4 に進みます。
Fix 4: --develを付けてもpip3が見つからない
SDK のインストールが完了していません。flatpak list | grep Sdk でブランチを確認し、フォールバックとしてサンドボックス内で pip を構築します。
flatpak run --command=python3 org.qgis.qgis -m ensurepip --upgrade --user
これはフォールバックとして扱い、それ以上の意味を持たせないでください。ここで推奨している出典はなく、--devel なしでは SDK ではなく Platform runtime に対して実行されます。その後、まず試す解決策のステップ3に戻ってください。
エラーが変わらなければ、Fix 5 に進みます。
Fix 5: Flathubビルドを使っていない
flatpak info org.qgis.qgis で確認します。何も返ってこなければ、QGIS は別の場所から入手したものであり、上記のコマンドはどれも適用できません。QGIS には公式 Snap パッケージがないため、Snap ビルドは第三者によるもので、独自のサンドボックスルールに従います。Debian と Ubuntu では、Flathub ではなく公式 QGIS リポジトリからインストールしてください。すると QGIS はシステムの Python を使用し、plugin の依存関係は通常の pip でインストールできます。
エラーが変わらなければ、私に送ってください。下のセクションに、メールに何を書けばよいかを説明しています。
なぜ起きるのか
Flatpak は、ディストリビューションがインストールした Python から隔離された独自の Python を持っているため、システムの pip や apt で追加したパッケージは QGIS から見えません。サンドボックス内では /usr が読み取り専用でマウントされています。通常の pip install はそこへの書き込みを試みるため、python3.11 のパスを含む [Errno 30] の行が表示されます。一方、--user を付けると同じファイルが書き込み可能な別のディレクトリに送られます。
pip 自体は SDK にあり、QGIS が通常起動する runtime にはありません。--devel がなければ実行する pip3 がそもそも存在しないため、エラーは Python ではなく bwrap から返されます。また、--devel が機能するのは対応する SDK がすでにマシン上にある場合だけであり、エラーブロックの最後の行はそのことを伝えています。
私たちの AI Segmentation plugin は Flatpak QGIS を検出し、Automatic モードを案内します。このモードは私たちのサーバー上で動作し、マシンに Python パッケージをインストールしません。
まだ解決しない場合
次の3つを送ってください。flatpak info org.qgis.qgis で確認した Flatpak QGIS のバージョン、実行した正確なコマンド、そして最後の行だけでなく完全な出力です。宛先は stephane.barbot@terra-lab.ai です。探しているパッケージが私たちの AI Segmentation plugin から要求されたものなら、そのこともメールに書いてください。最初に確認する対処法が変わるためです。
よくある質問
ターミナルではpipが動くのに、QGISでは動かないのはなぜですか?
ターミナルの pip は、ディストリビューションがインストールした Python に属しています。Flatpak には独自の Python があり、互いに相手のパッケージを見ることができません。そのため apt とシステムの pip を使っても、QGIS の状態は何も変わりません。すべてのインストールは flatpak run 経由で行う必要があります。これによってサンドボックス内で実行されます。
すべてのインストールで--develが必要ですか?
はい。pip3 は SDK にあり、QGIS が起動する runtime にはないため、--devel がなければ実行するものがありません。すべてのインストールで --user も付けてください。そうしないと、再び読み取り専用の /usr に書き込もうとして [Errno 30] の行が表示されます。
パッケージは実際にはどこに置かれますか?
サンドボックス内のユーザーごとの site ディレクトリに置かれます。Fix 2 のコマンドでその場所を表示できます。そのパスを QGIS Python Console の sys.path と照合してください。そのリストにあるどのフォルダーの外側に置かれたファイルも、QGIS が import することはありません。
代わりに使える公式QGIS Snapはありますか?
ありません。snapcraft.io/qgis は 404 を返し、Snap ストアにあるビルドは第三者によるものです。QGIS のドキュメントに掲載されているのは Flatpak、ディストリビューションのパッケージ、Spack です。そのため Debian または Ubuntu で Flathub の代わりになるのは Snap ではなく、公式 QGIS リポジトリです。
import が動くようになったら plugin に戻れます。私たちの2つの plugin は QGIS AI hub にあります。Windows にも同じ問題の独自の形があり、ImportError: DLL load failed while importing _C in QGIS にまとめています。


