
NapariのOpenGLエラーはQt競合が原因だった:RTX A5000環境で判明した解決法と最適構成
Napariで発生するOpenGLエラーは、GPUやドライバの問題だと考えがちだ。しかし実際には、より見落とされやすい「Qtバックエンドの競合」が原因となっているケースがある。本記事では、Windows環境(RTX A5000)で発生した不可解なエラーの原因と、安定動作に至るまでの検証・解決プロセスを詳しく解説する。
OpenGLエラーの正体:一見GPU問題に見える落とし穴
問題の発端は、Napari起動時に発生する以下のエラーだった。
RuntimeError: Using glBindFramebuffer with no OpenGL context.
このエラーは通常、OpenGLコンテキストが正しく初期化されていない場合に発生する。そのため、GPUやドライバ、あるいはOpenGLのバージョンに問題があると疑うのが自然だ。
実際に以下のような検証が行われた:
-
OpenGL 4.6が正常に動作していることを確認
-
PyQt5 / PyQt6の切り替え
-
napari[all]の導入
-
GPU関連パッケージの有無を変更
-
ソフトウェアレンダリングの強制
-
EGLの利用
しかし、いずれのケースでも同じエラーが再現された。
さらに、PyQtとOpenGLのみの最小構成スクリプトでは問題が発生しなかったため、NapariやVisPy周辺に原因があると考えられた。
真の原因:PyQt5とPyQt6の混在
調査を進めた結果、問題の核心は「異なるQtバックエンドの混在」にあった。
同一環境内にPyQt5とPyQt6が共存している場合、意図しない順序で読み込まれることがある。特に、pyqt5-sipなどの依存関係によってPyQt5が先にロードされると、以下のような問題が発生する:
-
OpenGLコンテキストの初期化失敗
-
Napari起動時のクラッシュ
-
再起動後の描画崩れ(2Dビューが表示されない、3Dが歪む)
つまり、OpenGLエラーのように見えて、実際にはQtの競合が原因だったのである。
解決策:Qtバックエンドの統一
この問題を解決するためには、Qtバックエンドを単一に統一することが不可欠だ。具体的には以下の手順が有効だった。
まず、既存のQt関連パッケージをすべて削除する:
-
pyqt
-
pyqt5
-
pyqt5-sip
-
qt-main
-
qt5-tools
-
qt5-applications
次に、PyQt6のみをインストールし、環境変数を設定する:
-
QT_API=pyqt6
さらに、Napariの設定ファイルを削除することで、キャッシュによる不具合も回避できる:
C:\Users<ユーザー名>\AppData\Local\napari
この対応により、Napari 0.5.3は正常に起動し、OpenGLエラーも完全に解消された。
プラグイン問題:Assistantが表示されない理由
Napariのプラグインにも注意が必要だ。特に「napari-pyclesperanto-assistant」は旧仕様(npe1)であり、新しいNapariでは互換性の問題が発生する。
この問題は以下の方法で解決できる:
-
napari-assistant(0.6.0)
-
napari-tools-menu(0.1.20)
また、Napari 0.5系ではnpe2アダプタを有効化する必要がある。
安定運用の鍵:環境を分離する
検証の結果、すべての機能を1つの環境に詰め込むと高確率で競合が発生することが分かった。そのため、用途ごとに環境を分けるのが最適解となる。
環境A:安定重視(GPU + Assistant)
-
Napari 0.5.3
-
PyQt6のみ
-
vispy 0.14
-
pyclesperanto-prototype
-
Assistantプラグイン
この構成ではZarr v2まで対応し、非常に安定した動作を実現できる。
環境B:最新技術スタック
-
Napari 0.6.x
-
新pyclesperanto
-
Python 3.11
-
OME-Zarr(Zarr v3)
-
Dask
こちらは最新機能を活用できるが、構成を誤ると不安定になりやすい。
特に以下の混在は避けるべきだ:
-
prototype版と新pyclesperantoの併用
-
npe1とnpe2プラグインの混在
まとめ:OpenGLエラーの本質と再発防止策
今回の事例から得られる重要なポイントは以下の通りだ。
-
OpenGLエラーでも原因はGPUとは限らない
-
PyQt5とPyQt6の混在は重大な不具合を引き起こす
-
Napariではクリーンな環境構築が最優先
-
用途別に環境を分けることでトラブルを回避できる
一見すると複雑に見えるNapariのトラブルだが、原因を正しく切り分ければ解決は難しくない。特にQt周りの依存関係は盲点になりやすいため、環境構築時には細心の注意を払うことが重要だ。
安定した画像解析環境を構築するためにも、今回のポイントをぜひ参考にしてほしい。