【Jupyter】WSL-Ubuntu上のAnacondaでJupyterのbashカーネルをインストールする
WSL:Ubuntu上のAnacondaでJupyterのbashカーネルをインストールする
今回は、Linuxのbash shell(バッシュ・シェル)
をJupyterで実行できるようにするbash kernel
をインストールしたいと思います。
目的は、CodeセルでLinuxコマンドやシェルスクリプトが実行できるようにすることと、カーネルのインストール練習です。
【実行環境】
# バージョン確認 !conda --version # Anacondaのバージョン !python -V # Pythonのバージョン !jupyter-notebook -V # Jupyter Notebookのバージョン
conda 4.10.1
Python 3.8.10
6.4.0
「Jupyter」は Julia言語 + Python言語 + R言語
の略語だと言われています。Jupyter Notebook
やJupyter Lab
のCodeセルではデフォルト設定でPythonが実行できるようになっています(Pythonのインストールも必要)が、Julia言語、Python言語、 R言語
だけでなく、様々なプログラム言語を書いて実行できます。他の言語を使えるようにするには個別のkernel(カーネル)
というものをインストールしカーネルを追加しなければなりません。
たとえばPythonとJupyterがインストール済みの環境で、ターミナルからjupyter notebook .
コマンドを実行すると、カレントディレクトリでJupyter Notebookが起動されます。「Home Page」というタブでブラウザが立ち上がり、そこにカレントディレクトリ内のフォルダやファイルが表示される。
HomePageタブの右上にある「新規」ボタンを押すと、
Notebook:
Python 3
-------------
Other:
テキストブック
フォルダ
端末
などとドロップメニューが出てくるかと思います。
デフォルト設定でPython用のkernel(ipykernal)がインストールされているので、メニューには「Python」だけが表示されているのですけど、別のカーネルをインストールして追加してやればドロップダウンのメニューが増え、Notebookごとで他の言語が実行できるようになります。
(kernel(カーネル)のインストール方法は使いたいプログラム言語によって違うようです。)
Windowsでbashカーネルをインストールできる条件
bashシェルはLinuxのシェルですので、LinuxOSが使える環境でなければなりません。MacOSは標準でbashシェルになっているらしいですが、Windowsでbashシェルを使うにはWSL
かWSL2
でLinuxOSを使えるようにするか、またはGitBash
というWindows上でLinuxコマンドが使えるようにするソフトをインストールする等して環境構築する必要があります。
- 参考 : [https://stackoverflow.com/questions/47395181/install-bash-kernel-on-windows-for-using-in-jupyter:title]
余談ですが、以前はGitBashをインストールして使っておりましたが、バグったんでWSLでUbuntuを入れました。Linuxコマンドを使う理由はプログラマ達がPythonのブログでそれを使った操作を行っているからで、余儀なくされたというか・・・。androidもMacOSもLinuxコマンドを使うので勉強して損はないかな。
bash_kernelのインストールとカーネルの有効化
UbuntuにAnacondaを入れているので、
[https://anaconda.org/conda-forge/bash_kernel:title]
に従って
condaでのカーネルのインストールと有効化
$ conda install -c conda-forge bash_kernel または $ conda install -c conda-forge/label/cf202003 bash_kernel
で行うべきでしょうが、
pip install
で以下のようにやってしまいました。
pipでのカーネルのインストールと有効化
$ jupyter kernelspec list # ← 使えるカーネルの確認() Available kernels: python3 /home/user/anaconda3/share/jupyter/kernels/python3 # ← 1つだけ $ pip install bash_kernel # ← これでインストール $ python -m bash_kernel.install # ← Jupiterに対してカーネルを有効化 $ jupyter kernelspec list # ← 使えるカーネルの確認 Available kernels: bash /home/user/.local/share/jupyter/kernels/bash # ← bashが追加された python3 /home/user/anaconda3/share/jupyter/kernels/python3
以下はコマンド実行ログ
(base) 茶屋六郎九郎:@~$ pip install bash_kernel Collecting bash_kernel Downloading bash_kernel-0.7.2-py2.py3-none-any.whl (15 kB) Requirement already satisfied: pexpect>=4.0 in ./anaconda3/lib/python3.8/site-packages (from bash_kernel) (4.8.0) Requirement already satisfied: ptyprocess>=0.5 in ./anaconda3/lib/python3.8/site-packages (from pexpect>=4.0->bash_kernel) (0.7.0) Installing collected packages: bash-kernel Successfully installed bash-kernel-0.7.2 (base) 茶屋六郎九郎:@~$ python -m bash_kernel.install Installing IPython kernel spec (base) 茶屋六郎九郎:@~$ jupyter kernelspec list Available kernels: bash /home/user/.local/share/jupyter/kernels/bash python3 /home/user/anaconda3/share/jupyter/kernels/python3
以上で、bashカーネルのインストールと有効化は完了しました。
pipとconda 混ぜるな危険
とは古事記にも書かれております。以前、Windowsに直にAnacondaを入れていた時pip install
でバグってAnacondaを再インストールし直したことがあった。
condaとpipは混ぜたらまずいのか : システム医学研究会長のブログ
はお医者さんみたいですが「今んとこバグってない」という楽観派で、
python#2.3 pipとconda|mntn|note
はconda install
できない時の方法を詳しく載せてある慎重派。
極力混ぜない方がいいとは思うけど・・・
bashカーネルでnotebookを新規作成する
で新規にタブが開いてipynbファイルが作られます。
Pythonカーネル(ipykernel)で作ったファイルでは、
- ブラウザのURL
http://localhost:8888/notebooks/Untitled.ipynb?kernel_name=python3#
- ブラウザのURL
Bashカーネル(bash kernel)で作ったファイルでは、
- ブラウザのURL
http://localhost:8888/notebooks/Untitled1.ipynb?kernel_name=bash
- ブラウザのURL
になっています。Notebookごとにカーネルが違う。
bashカーネルのCodeセルでbashシェルを実行する
PythonカーネルのCodeセルにbashシェル・コマンドを書くと、当たり前ですがエラーになります。
echo 'Hello World !'
File "<ipython-input-20-a27ca22f55f0>", line 1
echo 'Hello World !'
^
SyntaxError: invalid syntax
もしPythonカーネルのCodeセルでbashシェルを使いたいなら、システムコマンドを実行するための「!」を先頭に書きます。
!echo 'Hello World !'
Hello World !
bashカーネルで開いたNotebookのCodeセルにシェルスクリプトを書いて実行したものをコピペする。
a=100 b=50 # aがbより小さいなら if [ $a -lt $b ]; then echo 'んなこたない。' else echo 'そりゃそうだろう' fi
そりゃそうだろう
シェルスクリプトで比較演算を行う際、文字列と数値で書き方が異なり、しかも不等号記号を使えない・・・
とりあえず動いたっちゅうことで。
↑のpipコマンドの実行ログで、プロンプトの「茶屋六郎九郎」という名前の前に「(base)」と仮想環境名が表示されています。
Anacondaをインストールすると自動的に「base」という名前の仮想環境が作られますが、任意の仮想環境(今回はbase)でインストールしたカーソルを、別の仮想環境にも追加したい場合があるかと思います。
その方法については、リンクだけ貼っておきます。
参考リンク(インストール済みカーネルを他の仮想環境へ追加する方法)
Anaconda使用で、condaでの仮想環境の作成・複製・削除する方法
Anaconda使用で、condaでの仮想環境の作成・仮想環境へのjupyterカーネルの追加方法
他の仮想環境にactivate(有効化)したら、$ipython kernel install --user --name=環境名 --display-name=環境名
で追加、と。
こちらもAnaconda使用で、condaでの仮想環境の作成・仮想環境へのjupyterカーネルの追加と削除の方法
venv使用で、仮想環境に入り、pipでカーネルのインストール、カーネルの追加方法
venv使用で、仮想環境の作成と有効化、pipでカーネルのインストール、カーネルの追加方法
その他、参考リンク
jupyterで使えるカーネル一覧
なんでもかんでも動くね。
「通常、カーネルは単一言語の実行のみを許可するが、いくつかの例外がある。」
Python製ドキュメントビルダー・静的サイトジェネレータSphinx
の拡張ライブラリ
Jupyterカーネルに埋め込まれたコードをSphinxで読み込む場合に必要、と。
TypeScript(とJavaScript)をJupyter Notebookで動かして機械学習する
異なるNotebook間で変数を共有する方法
%store
というマジックコマンドを使うと別々のipynbファイル間で変数の共有ができるらしい。すご
以上です。