y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

Anaconda + Jupyter Notebook 環境構築でのトラブルあれこれ

Windows に Anaconda + Jupyter Notebook の環境を作成した際、いくつかのトラブルに遭遇したので、現象と解決方法を報告します。前提となる環境は以下のとおりです。Anaconda は、ウェブサイト*1からインストーラ (Anaconda3-4.2.0-Windows-x86_64.exe) をダウンロードしてインストールしました。

なお、以下の内容は記事作成時点の 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) も追加されます。