Anacondaがアップデートしてくれない!ターミナルで解決できた話

普段はPythonの学習環境としてvenvを使っていますが、今回は動画講義でAnacondaが使われていたため、何事も経験と思い、Anacondaで学習してみることにしました。

ところが、Anaconda Navigatorのアップデートがいつまでも終わらず、JupyterLabのインストールも途中で止まってしまいました。

画面からはなかなか進まなかったものの、ターミナルからコマンドを実行することで解決できたので、今回の流れを初心者なりにまとめてみます。

Anaconda Navigatorのアップデートが終わらない

Anaconda Navigatorを開くと、度々促されるUpdate。しかたないからアップデートしようとしたらずーっとこの画面でした。

そして謎のエラー

「root」と表示されていたので少し戸惑いましたが、これはAnacondaの基本環境であるbase環境を指しているようです。

Anaconda Navigatorはbase環境に入っているため、Navigatorを更新するときはbase環境を更新します。

ターミナルからNavigatorを更新する

画面からアップデートが進まない場合は、ターミナルから更新できるらしい….ということで、

conda update --name base conda

このコマンドは、base環境にあるconda本体を更新します。

続けて、Anaconda Navigatorを更新します。

conda update --name base anaconda-navigator

このコマンドは、base環境にあるAnaconda Navigatorを更新します。

Macでcondaコマンドが使えない場合は、Anacondaの場所を指定して実行します。

/opt/anaconda3/bin/conda update --name base conda

/opt/anaconda3/bin/condaは、MacにインストールしたAnacondaのcondaを直接指定しています。

JupyterLabのインストールも終わらない

次に、動画講義で使用する環境にJupyterLabをインストールしようとしました。

/opt/anaconda3/bin/conda install --name selenium jupyterlab

このコマンドは、seleniumという名前の環境にJupyterLabをインストールするものです。

しかし、次のような表示が出て、処理が進まなくなりました。

Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve.
Retrying with flexible solve.
Solving environment: -

これは、JupyterLabをインストールする前に、既存のパッケージとの組み合わせを計算している状態です。

Anacondaでは、パッケージ同士の相性や必要なバージョンを確認するため、インストールに時間がかかることがあります。

処理を止めたいとき

しばらく待っても何も変わらない場合は、次のキーを押して処理を中断できます。

control + C

ただ、今回はcontrol + Cを押してもすぐには終了しませんでした。

その場合は、別のターミナルを開いて、実行中のcondaを確認します。

ps -ax | grep '[c]onda'

このコマンドは、現在動いているcondaの処理を探します。

表示された行の先頭にある数字がプロセス番号です。その番号を使って処理を終了します。

kill プロセス番号

たとえばプロセス番号が12345なら、次のように入力します。

kill 12345

base環境とselenium環境は別

今回、少し混乱したのが環境ごとの違いです。

conda update --name base conda

このコマンドで更新されるのは、base環境だけです。

今回JupyterLabをインストールしようとしたselenium環境が、自動的に更新されるわけではありません。

selenium環境のパッケージを更新したい場合は、環境名を指定します。

conda update --name selenium

JupyterLabだけを更新する場合は、次のコマンドです。

conda update --name selenium jupyterlab

現在作られている環境を確認するには、次のコマンドを使います。

conda info --envs

venvとAnacondaを使ってみて

普段使っているvenvでは、次のように仮想環境を作成します。

python -m venv .venv

このコマンドは、プロジェクト内に.venvという仮想環境を作成します。

一方、Anacondaではcondaコマンドを使って、環境やパッケージを管理します。

venvに慣れていたため、Anacondaのbase環境やroot環境、依存関係の解決など、最初はわからないことが多くありました。

それでも、動画講義と同じ環境を実際に使ってみたことで、venvとの違いを知ることができました。

まとめ

今回わかったことは、次のとおりです。

  • rootはAnacondaのbase環境を指している
  • Anaconda Navigatorはbase環境に入っている
  • 別の環境にパッケージを入れるときは環境名を指定する
  • JupyterLabのインストールでは依存関係の計算に時間がかかることがある
  • Navigatorで進まない場合は、ターミナルから操作できる

普段はvenvを使っていますが、動画講義でAnacondaが使われていたことをきっかけに、今回はAnacondaにも挑戦してみました。

実際に使ってみることで、それぞれの環境の違いを理解するきっかけになったので、結果的には良い経験になりました。