はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

IPython-notebook-extensions(< 0.2.0)から0.2以降へのアップデートメモ

 

IPython-notebook-extensions(< 0.2.0)から0.2以降へのアップデートメモ

old版(IPython-notebook-extensions < 0.2.0)から0.2以降にアップデートした際,コンフリクトを起こしたので, 対処メモ.なお,試行錯誤したメモであり一時的な解決なので,再インストールしたほうが速いかも.

github.com

環境

  • Widnows 10 64bit
    • jupyter(< 4.2)

での話です.

 

旧バージョンをアンインストール

インストール済みのextensionの確認

まず,インストール済みのextensionを確認. jupyterのサブコマンドとして,jupyter nbextensionが使える. jupyter nbextension listでインストール済みのextensionを確認できる. 例えば以下のように表示される.

> jupyter nbextension list

Known nbextensions:
  config dir: C:\Users\usrname\.jupyter\nbconfig
    notebook section
      usability/hide_input_all/main disabled
      usability/toc2/main disabled
      usability/runtools/main disabled
      usability/collapsible_headings/main disabled
      usability/codefolding/main disabled
      usability/help_panel/help_panel disabled
      config/config_menu/main disabled
      publishing/gist_it/main disabled
      usability/dragdrop/main disabled
      usability/autosavetime/main disabled
      publishing/printview/main disabled
      usability/hide_input/main disabled
      usability/equation-numbering/main disabled
      usability/python-markdown/main disabled

old(<0.2)版でインストールした場合の特徴としては,

usability/(extension_name)/main

と3つに区切られて表示される.

それに対して,0.2以降では

(extension_name)/main

と短縮されたので,これで見分けることができる.

 

extensionの無効化

unistall する前に有効になっているextensionを無効化しておく. 有効になっているextensionはenbaledと表示される.

usability/python-markdown/main enabled

jupyter nbextensionのサブコマンド中のjupyter nbextension disableコマンドで無効にできる. 例えば,以下のコマンドでpython-markdownextensionを無効にできる.

> jupyter nbextension disable usability/python-markdown/main
 

extensionのアンインストール

jupyter nbextension uninstall

でextensionをアンインストールできる. しかし,自環境はjupyter(< 4.2)でしたが,動きませんでした. jupyter(< 4.2)の場合,nbextensionコマンドは壊れているのかもしれません.

 

configの削除

`jupyter nbextension list' コマンドで表示される nbconfigファイルを削除する.

config dir: C:\Users\usrname\.jupyter\nbconfig
 

リポジトリの削除

以前,

 pip install https://github.com/ipython-contrib/IPython-notebook-extensions/archive/master.zip --user

cartman0.hatenablog.com

でインストールしていたので,

pip uninstall IPython-notebook-extensions

リポジトリをアンインストールする.

 

extensionのyamlファイルが複製される問題の対処

 自環境では,このまま新しいバージョンをインストールして, localhost:8888/nbextensions にアクセスしたときに, extensionのyamlファイルが複製されextensionが複数表示される (旧extensionは旧パスで表示される)ということがあった.

ほかにも確認されている. https://github.com/ipython-contrib/jupyter_contrib_nbextensions/issues/529

どうやら,1度インストールした旧extensionをどこかに保存していて, 新たにインストールし直しても,旧extensionももう1度コピーしてくるような動作をするよう.

対処としては, extensionが入っているファルダを検索して nbextensions/フォルダごと削除する.

また,隠しフォルダにも保存されている場合があるので, 以下のコードで認識されているnbextensionのフォルダ(nbextension_dir) とその中のyamlを抽出してくれるので,それらを削除する.

import os.path
from itertools import chain
from jupyter_core.paths import jupyter_data_dir
from notebook.nbextensions import _get_nbextension_dir as get_nbext_dir

nbextension_dirs = (get_nbext_dir(), os.path.join(jupyter_data_dir(), 'nbextensions'))
yaml_files = []
for root, dirs, files in chain.from_iterable(os.walk(nb_ext_dir, followlinks=True) for nb_ext_dir in nbextension_dirs):
   for filename in files:
       if filename.endswith('.yaml'):
           yaml_files.append(os.path.join(root, filename))

for yaml_path in sorted(yaml_files):
   print(yaml_path)

自環境の場合は,AppDataの中にもextensionファイルが作られていた(どのタイミングか不明).これも削除しておく.

C:\Users\user_name\AppData\Roaming\jupyter\nbextension
 

jupyter_contrib_nbextensions(>=0.2)のインストール

condaがある場合

conda install -c conda-forge jupyter_contrib_nbextensions

でインストールできる.

 

jupyter nbextension listで確認すると,

> jupyter nbextension list

config dir: C:\Miniconda3\etc\jupyter\nbconfig
    notebook section
      contrib_nbextensions_help_item/main enabled
      - Validating: ok
      nbextensions_configurator/config_menu/main enabled
      - Validating: problems found:
        - require?  X nbextensions_configurator/config_menu/main
    tree section
      nbextensions_configurator/tree_tab/main enabled
      - Validating: problems found:
        - require?  X nbextensions_configurator/tree_tab/main

新しくインストールされていることがわかる.

しかし,nbextensions_configurator/config_menu/mainnbextensions_configurator/tree_tab/main が正しくインストールされていないことを確認. この部分はまだ未解決

 

インストールすると,サブコマンドとして jupyter contrib nbextensionが使えるようになる.

extensionは,ローカルにあったほうがいいので, 以下のように全extensionをインストールする.

jupyter contrib nbextension install --user

この状態で,jupyter nbextension listしても追加した拡張機能は見れないので, 1度localhost:8888/nbextensionsへアクセスする. 複製されなければとりあえず成功.

1度有効にした拡張機能は,jupyter nbextension list に表示されるようになる.

 

アンインストール

 拡張機能周りをアンインストールする場合,
conda uninstall jupyter_contrib_core

jupyter_contrib_nbextensions でインストールしたパッケージをすべてアンインストールできる.

 

もろもろ済んだら,jupyterは4.2以降にアップデートしておいたほうがいいです.

 

関連リンク