Anaconda + Jupyter Notebook 環境構築でのトラブルあれこれ
Windows に Anaconda + Jupyter Notebook の環境を作成した際、いくつかのトラブルに遭遇したので、現象と解決方法を報告します。前提となる環境は以下のとおりです。Anaconda は、ウェブサイト*1からインストーラ (Anaconda3-4.2.0-Windows-x86_64.exe) をダウンロードしてインストールしました。
- Windows 7 Home Premium (64bit) + Service Pack 1
- Anaconda 4.2.0 (for Windows, Python 3.5 version, 64bit)
なお、以下の内容は記事作成時点の 2017-01-29 に確認したものです。今後、パッケージの更新等により状況が変化する可能性もありますので、注意してください。
[2017-02-03 追記]
1 月 31 日に Anaconda 4.3.0 がリリースされましたが、下記の問題が未解決のまま conda 4.3.8 が同梱されているようで、私の環境では Jupyter Notebook からのパッケージ管理ができない状態です。
conda 4.3.8 に更新すると Jupyter Notebook でパッケージ一覧を表示できない
Anaconda には conda 4.2.9 が同梱されていましたが、これを最新の conda 4.3.8 に更新すると、Jupyter Notebook の Conda タブを開いたときに以下のエラーが発生し*2、パッケージ一覧を表示できなくなりました。
Error An error occurred while retrieving installed packages. Internal Server Error
コマンドプロンプトを開いて元のバージョンにダウングレードすることで解決できそうです*3。実行例を以下に示します。
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\Uchiyama>activate root (root) C:\Users\Uchiyama>conda install conda=4.2 Fetching package metadata ........... Solving package specifications: . Package plan for installation in environment C:\Users\Uchiyama\Anaconda3: The following packages will be DOWNGRADED due to dependency conflicts: conda: 4.3.8-py35_0 --> 4.2.16-py35_0 Proceed ([y]/n)? y
Jupyter Notebook で作成した conda 環境を利用するとログにエラーが出る
Jupyter Notebook 上で conda 環境を作成した後、その環境を使おうとするとログに以下のエラーが表示されました。
[IPKernelApp] ERROR | No such comm target registered: jupyter.widget.version [IPKernelApp] ERROR | No such comm target registered: jupyter.widget.version
これは ipywidgets パッケージを追加することで解決しました。実行例を以下に示します。作成した環境の名前を myenv としています。なお、Jupyter Notebook 上でパッケージを選択して追加する方法でも問題ありません。
C:\Users\Uchiyama>conda install -n myenv ipywidgets
ウェブで解決方法を調べたところでは jupyter パッケージを追加する方法が標準的なようで、そちらの方が安心かもしれません。jupyter をインストールすると依存パッケージとして ipywidgets もインストールされます。
jupyter は多くの依存パッケージを持っていて一見「不必要に太ってしまう」印象を受けますが、その多くは matplotlib の依存パッケージでもあり、それを考慮すれば大きな差はなさそうです。以下は、あらかじめ ipywidgets と matplotlib をインストールした環境に jupyter を追加する様子です。matplotlib は標準的に利用されるパッケージだと思いますので、これが実質的な差分だと言えそうです。
C:\Users\Uchiyama>conda install -n myenv jupyter ... (省略) The following NEW packages will be INSTALLED: jupyter: 1.0.0-py36_3 jupyter_console: 5.0.0-py36_0 qtconsole: 4.2.1-py36_2 Proceed ([y]/n)?
conda コマンドを直接実行して作成した conda 環境を Jupyter Notebook で選択できない
コマンドプロンプトを開いて conda 環境を直接作成した場合、Jupyter Notebook でファイルを作成したりカーネルを変更したりするときの選択肢に表れませんでした*4。
これも ipywidgets パッケージを追加することで解決しました*5。
matplotlib をインストールできない
作成した conda 環境に matplotlib を追加しようとしたところ、依存している qt のインストールに失敗しました。エラーログは以下のとおりです。
C:\Users\Uchiyama>conda install -n myenv matplotlib ... (省略) Linking packages ... PaddingError: Placeholder of length '30' too short in package qt-5.6.2-vc14_3.% The package must be rebuilt with conda-build > 2.0.
これは Anaconda に同梱される conda のバージョンが古いためで、conda を更新することで解決できます。ただし、ここで最新バージョンに更新してしまうと最初に挙げたパッケージ一覧を表示できない問題が発生するので、4.2 系の最新である 4.2.16 に更新します。実行の様子を以下に示します。conda の更新は root 環境に対して実行することに注意してください。
C:\Users\Uchiyama>conda install conda=4.2 ... (省略) The following NEW packages will be INSTALLED: conda-env: 2.6.0-0 The following packages will be UPDATED: conda: 4.2.9-py35_0 --> 4.2.16-py35_0 pyopenssl: 16.0.0-py35_0 --> 16.2.0-py35_0 requests: 2.11.1-py35_0 --> 2.12.4-py35_0 Proceed ([y]/n)? y
conda の更新後に改めて matplotlib をインストールします。今度は問題なくインストールできました。
C:\Users\Uchiyama>conda install -n myenv matplotlib ... (省略) Linking packages ... 1 個のファイルをコピーしました。 | 0% [ COMPLETE ]|##################################################| 100%
nbbrowserpdf と conda の競合 (未解決)
Jupyter Notebook の起動時に以下の警告が表示されるので、nbbrowserpdf をインストールして解決したいのですが、conda 4.3 に依存しているようで困っています。
[W 09:55:12.205 NotebookApp] \u2717 nbpresent PDF export DISABLED: No module named 'nbbrowserpdf'
nbbrowserpdf パッケージのインストールを確認した様子は以下のとおりです。
C:\Users\Uchiyama>conda install -c anaconda-nb-extensions nbbrowserpdf ... (省略) The following NEW packages will be INSTALLED: ghost.py: 0.2.3-py35_0 anaconda-nb-extensions nb_config_manager: 0.1.3-py35_0 anaconda-nb-extensions nbbrowserpdf: 0.2.2-py35_0 anaconda-nb-extensions pypdf2: 1.25.1-py35_0 anaconda-nb-extensions The following packages will be UPDATED: conda: 4.2.16-py35_0 --> 4.3.8-py35_0 Proceed ([y]/n)? n
その他の瑣末な問題
Windows 環境に特有の現象だと思いますが、以下の問題がありました。いずれも瑣末な問題で、Jupyter Notebook の動作に支障をきたすような内容ではありません。
Anaconda をアンインストールしても、コントロールパネルの「プログラムと機能」から項目が消えない
コントロールパネルの「プログラムと機能」から "Python 3.5.2 (Anaconda3 4.2.0 64-bit)" を選択してアンインストールしても、リストに項目が残ってしまいます。アンインストール自体は正常に終了しています。もう一度選択してアンインストールを試みると、「既にアンインストールされている可能性があります」というメッセージダイアログが表示され、項目を削除できました。
作成した conda 環境ごとにスタートメニューに項目が追加される
たとえば、myenv という conda 環境を作成すると、スタートメニューにも以下の項目が追加されてしまいます*6。
- IPython (myenv)
- Jupyter Notebook (myenv)
これはどうにも鬱陶しいのですが、一つ一つ削除して対応しています。削除した状態から conda 環境の remove なども試してみましたが、特に問題はないようです。
スタートメニューの "Reset Spyder Settings" 項目のアイコンがデフォルトのファイルアイコンに戻る
どのタイミングで発生したのか未確認ですが、スタートメニューの "Reset Spyder Settings" という項目のアイコンが変わってしまっていました。以下の場所にアイコンファイルがあったので、再設定して戻しました。
C:\Users\Uchiyama\Anaconda3\Scripts\spyder_reset.ico
*1:https://www.continuum.io/downloads
*2:実際にはウェブブラウザ上でメッセージダイアログが開いて表示されます。
*3:解決「できそう」というのは、確認が十分でない可能性があるためです。元通りパッケージ一覧を表示できることは確認しましたが、私はその後、念のため Anaconda を再インストールしました。
*4:Jupyter 関連のパッケージが一切入っていないので、考えてみれば当然なのかもしれません。ただ、そのような環境も Conda タブではリストに表示されていたため、戸惑ってしまいました。
*5:厳密には、jupyter_core をインストールすれば選択肢には表示されます。ただし実際にカーネルを起動するためには ipykernel が必要で、さらにログにエラーが出る前述の問題を解決するには ipywidgets が必要です。ipywidgets をインストールすれば、これらはすべて依存パッケージとしてインストールされます。
*6:ipywidgets ではなく jupyter を追加した場合には、この他に Jupyter QTConsole (myenv) も追加されます。