症状と原因
久しぶりにMacでAnaconda Navigatorを起動したら「Loading applications」と表示されたまま、動かず起動できなくなっていた。(Mac, Windowsは関係なく時々起こる問題のようです。)

Anaconda Navigaor をアップデートすれば起動できたという人もいるようだが、真似してターミナル で
conda update anaconda-navigator
anaconda-navigator –reset
などと入力しても、そもそもアップデートすら硬直して終わらない。
原因を探るために、ターミナルで
anaconda-navigator
と入力し、ターミナルから起動してみると
File "/Users/(ユーザー名)/anaconda3/lib/python3.7/site-packages/anaconda_navigator/api/anaconda_api.py", line 888, in process_apps
versions=[vsdata.get('productVersion')],
AttributeError: 'str' object has no attribute 'get'
とエラー文が表示される。どうもanaconda_api.pyというファイルの888行目でエラーが起きている。

確かにエラー文にある「anaconda3/lib/python3.7/site-packages/anaconda_navigator/api/anaconda_api.py」というファイルで
888行目を見てみると
versions=[vsdata.get(‘productVersion’)]
とある。

色々調べてみると、なんらかの問題でvscode(Visual Studio Code)のwebサイトからバージョン情報を取得できなくなっているのが原因だそう。
実際に、anaconda_api.pyファイル内で「vsdata」の定義などを調べてみると、特定のurlから情報を取得するように書かれているのだが、そのurl先に問題が発生していることが分かる。詳しくは補足で後述する。
対策・解決法
問題を回避するには、エラー文にある anaconda_api.pyファイルの 888行目のコード(Anacondaのバージョンによってこの888という行数は変わる)
versions=[vsdata.get('productVersion')],
をコメントアウトして、
versions=["1b8e8302e405050205e69b59abb3559592bb9e60"],
と書き換える。

参考1:Anaconda Navigator won’t launch, download_api error
参考2:Anacondaフラッシュバック問題 AttributeError: ‘str’ オブジェクトには ‘get’ 属性がない
最適な方法ではないという人もいるが、こうすることで、vscodeから更新を取得しないようにできるらしい。少なくとも動くようにはなる。
おそらく、きちんと問題を修正するには、AnacondaあるいはAnaconda Navigatorをアンインストールして再インストールするべきなのかもしれない。
私の環境ではNavigatorのアップデートは動かなかったし、Navigatorの再インストールだけで上手くいくかはやってないので分からない。Anacondaを丸々インストールし直すとなると、tensorflowなどの後からインストールしたモジュールも入れ直さないといけなくなりそうなので、大変そう。
補足:vsdataの原因究明についての詳細
888行目の
versions=[vsdata.get(‘productVersion’)],
が問題の原因だったが、vsdataの定義を探ると原因が分かってくる。
以下の参考サイトで詳しく解説されている。
参考:Anaconda Navigatorが起動しない時の対処方法のメモ
ファイル内のコードを辿ってみると
- 「vsdata」は 「self.vscode_application_data」(880行目)で設定されている
- 文字列検索してvscode_application_dataの定義文を調べる
→ urlが「VSCODE_ENDPOINT」と関連づけされている - VSCODE_ENDPOINTは以下のurlに紐づいている
VSCODE_ENDPOINT = (
'https://update.code.visualstudio.com/api/update'
'/{}/stable/version'.format(VSCODE_SUBDIR)
実際にこのurlにつないでみると(pythonの構文でformatがあるのでそこは{}に代入)、
確かに
「Cannot GET /api/update/VSCODE_SUBDIR/stable/version’」
と出てくる。上手くバージョンが取得できていない。
その他の参考
Anaconda Navigatorが起動しないとき
↑Navigatorのリセットやアップデートの仕方を紹介している。ここの方は丸ごとAnacondaをインストールし直したそう。
コメント