pyqtwebengineが干渉してanaconda-navigatorのアップデートができなかった理由 #Python
anaconda-navigatorをアップデートしようとしてできなかったのですが、その原因について調べてみました
あくまでこういった原因でアップデートできないこともあるんだな程度で読んでいただければと思います
GUIでのアップデートができない
anacondaユーザーであればよく遭遇すると思いますが、上図のウィンドウが出て、 Yesを押しても一向にアップデートが終わらないことがあります
なので、コマンドプロンプトやPowerShellからコマンド操作でanaconda-navigatorをアップデートすることが割と多いように思います
今回もそうではあるんですが、違う点はコマンドでもアップデートできなかったということです
しかも、色々試行錯誤して何かいつもと原因が違うような気がしたので、忘備録として残します
コマンドプロンプトでのアップデートもできない
先ほども書いたようにコマンドプロンプトからアップデートができませんでした
conda update anaconda-navigator==2.6.0
で、アップデートしようとするとinstallを使えと言われるのでそうします
conda install anaconda-navigator==2.6.0
できません
何やらたくさん警告を吐いた後に赤字でコメントを付けてきました
読みます
最後の部分を翻訳するとこんな感じ
うーん、要するにインストール済みpyqtwebengineのバージョンが条件を満たさないからダメよと言っているようです
インストールされているpyqtwebengineのバージョンを確認します
確かに、5.15.10未満でした
では、こいつのアップデートをすればいいかと試してみます
pyqtwebengineのアップデートもできない
baseのコマンドプロンプトを起動
手っ取り早く全部のパッケージをアップデートしてしまいます
conda update --all
anacondaを再起動
pyqtwebengineのバージョンを確認します
conda list pyqtwebengine
バージョン変わらず(アップデートされず)
バージョンを指定してみる
(base) C:\Users\username>conda update pyqtwebengine==5.15.10
CondaError: Invalid spec for 'conda update': pyqtwebengine==5.15.10
Use 'conda install' instead.
先ほどと同じ、conda installを使えと
指示通りに使ってみるが、もちろんダメ
(base) C:\Users\username>conda install pyqtwebengine==5.15.10
Channels:
- bioconda
- conda-forge
- defaults
Platform: win-64
Collecting package metadata (repodata.json): done
Solving environment: failed
LibMambaUnsatisfiableError: Encountered problems while solving:
- package pyqtwebengine-5.15.10-py39hd77b12b_0 is excluded by strict repo priority
いっそのことアンインストールしてみる
(base) C:\Users\username>conda uninstall pyqtwebengine
Channels:
- bioconda
- conda-forge
- defaults
Platform: win-64
Collecting package metadata (repodata.json): done
Solving environment: done
## Package Plan ##
environment location: C:\Users\jun_9\anaconda3
removed specs:
- pyqtwebengine
結構たくさんのパッケージをダウングレードさせられる模様
だがしかし、
CondaSSLError: Encountered an SSL error. Most likely a certificate verification issue.
Exception: [SSL] record layer failure (_ssl.c:2580)
CondaSSLError: Encountered an SSL error. Most likely a certificate verification issue.
Exception: [SSL] record layer failure (_ssl.c:2580)
アンインストールもさせてくれない
ああ、そういえば 管理者権限 でやってなかったと思い出して、やり直してみます
こっちからだとアンインストールはできた
conda uninstall pyqtwebengine
続けて以下のバージョンをインストールしてみる
(base) C:\Windows\System32>conda install pyqtwebengine==5.15.10
Channels:
- bioconda
- conda-forge
- defaults
Platform: win-64
Collecting package metadata (repodata.json): done
Solving environment: failed
LibMambaUnsatisfiableError: Encountered problems while solving:
- package pyqtwebengine-5.15.10-py39hd77b12b_0 is excluded by strict repo priority
管理者権限で実行してもできない…
あ、そういえば、そもそもpyqtwebengineはanaconda-navigatorのインストールに必要な要件ではないのでした
pyqtwebengineをアンインストールできたならanaconda-navigatorのインストールには関与してこないはず
anaconda-navigatorがアップデートできれば良いので無視します
が!
頑なにアップデートさせてくれません
上の実行結果のエラーをさっきは無視してましたが、よく見ると
うん?
リポジトリの優先度?
そう、ここで原因の糸口が見つかりました。
原因はchannelの優先順位と対応バージョン
色々コマンド打って調べてみた結果、channelの優先順位が関係していることが分かりました
私の環境でインストールされているpyqtwebengineはconda-forgeのものです
しかし、conda-forgeのpyqtwebengineは現時点で5.15.9までしかリリースされていませんでした
5.15.10をインストールしようと思ったらデフォルトのチャンネル(pkgs/main)からでないといけない
というわけで結論は、
(自分の環境において)デフォルトチャンネルよりもconda-forge、biocondaの方が優先度が高かったから
ということになります
以下は現時点でインストール可能なpyqtwebengineのバージョン一覧です
(base) C:\Users\username>conda search pyqtwebengine
Loading channels: done
# Name Version Build Channel
~ (古いバージョンは記載省略) ~
pyqtwebengine 5.15.9 py310he49db7d_4 conda-forge
pyqtwebengine 5.15.9 py310he49db7d_5 conda-forge
pyqtwebengine 5.15.9 py311h5a77453_4 conda-forge
pyqtwebengine 5.15.9 py311h5a77453_5 conda-forge
pyqtwebengine 5.15.9 py312hca0710b_5 conda-forge
pyqtwebengine 5.15.9 py38h30305e3_4 conda-forge
pyqtwebengine 5.15.9 py38h30305e3_5 conda-forge
pyqtwebengine 5.15.9 py39h2f4a3f1_4 conda-forge
pyqtwebengine 5.15.9 py39h2f4a3f1_5 conda-forge
pyqtwebengine 5.15.10 py310hd77b12b_0 pkgs/main
pyqtwebengine 5.15.10 py311hd77b12b_0 pkgs/main
pyqtwebengine 5.15.10 py312hd77b12b_0 pkgs/main
pyqtwebengine 5.15.10 py38hd77b12b_0 pkgs/main
pyqtwebengine 5.15.10 py39hd77b12b_0 pkgs/main
さて、原因は分かったのですが、私にとってconda-forgeとbiocondaの優先度をデフォルトチャンネルよりも下げるわけにはいかないというのが現状です
さてどうするか?
conda-forgeのpyqtwebengineはしっかり今まで更新がされているので、いずれ更新されるだろうという予想のもと、
アップデートしないでconda-forgeのpyqtwebengineが更新されるまで待つ
ということにしました
いざとなったら
(base) C:\Users\username> conda install -c defaults pyqtwebengine==5.15.10
Channels:
- defaults
- bioconda
- conda-forge
Platform: win-64
Collecting package metadata (repodata.json): done
Solving environment: done
## Package Plan ##
environment location: C:\Users\jun_9\anaconda3
added / updated specs:
- pyqtwebengine==5.15.10
The following packages will be downloaded:
package | build
---------------------------|-----------------
ca-certificates-2024.3.11 | haa95532_0 128 KB
certifi-2024.2.2 | py310haa95532_0 160 KB
conda-24.3.0 | py310haa95532_0 949 KB
pyqt-5.15.10 | py310hd77b12b_0 4.1 MB
pyqt5-sip-12.13.0 | py310h2bbff1b_0 75 KB
pyqtwebengine-5.15.10 | py310hd77b12b_0 134 KB
qt-webengine-5.15.9 | h5bd16bc_7 58.1 MB
------------------------------------------------------------
Total: 63.6 MB
The following packages will be UPDATED:
ca-certificates conda-forge::ca-certificates-2024.2.2~ --> pkgs/main::ca-certificates-2024.3.11-haa95532_0
pyqt conda-forge::pyqt-5.15.9-py310h1fd54f~ --> pkgs/main::pyqt-5.15.10-py310hd77b12b_0
pyqt5-sip conda-forge::pyqt5-sip-12.12.2-py310h~ --> pkgs/main::pyqt5-sip-12.13.0-py310h2bbff1b_0
pyqtwebengine conda-forge::pyqtwebengine-5.15.9-py3~ --> pkgs/main::pyqtwebengine-5.15.10-py310hd77b12b_0
qt-webengine conda-forge::qt-webengine-5.15.8-h4bf~ --> pkgs/main::qt-webengine-5.15.9-h5bd16bc_7
The following packages will be SUPERSEDED by a higher-priority channel:
certifi conda-forge/noarch::certifi-2024.2.2-~ --> pkgs/main/win-64::certifi-2024.2.2-py310haa95532_0
conda conda-forge::conda-24.3.0-py310h5588d~ --> pkgs/main::conda-24.3.0-py310haa95532_0
Proceed ([y]/n)?
としても良いかもしれません
私は別にpyqtwebengineを普段使っていませんし、conda-forgeの方が大切なので、無理にアップデートする方がリスクになりかねません
まとめ
pyqtwebengineの古いバージョンがコンフリクトしてanaconda-navigatorがアップデートできなかった原因について事例紹介しました
あまり同じような方はいらっしゃらないかもしれませんが、何かのお役に立てば幸いです
サポートいただけると大きな励みになります。 どうぞよろしくお願い致します。