よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

【Jupyter】WSL-Ubuntu上のAnacondaでJupyterのbashカーネルをインストールする

WSL:Ubuntu上のAnacondaでJupyterのbashカーネルをインストールする

今回は、Linuxbash shell(バッシュ・シェル)をJupyterで実行できるようにするbash kernelをインストールしたいと思います。
目的は、CodeセルでLinuxコマンドやシェルスクリプトが実行できるようにすることと、カーネルのインストール練習です。


【実行環境】

  • Windows10
  • WSL:UbuntuにAnaconda
  • Python 3.8
  • Jupyter Notebook 6.4
# バージョン確認
!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 NotebookJupyter 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(カーネル)のインストール方法は使いたいプログラム言語によって違うようです。)



Windowsbashカーネルをインストールできる条件

bashシェルはLinuxのシェルですので、LinuxOSが使える環境でなければなりません。MacOSは標準でbashシェルになっているらしいですが、Windowsbashシェルを使うにはWSLWSL2でLinuxOSを使えるようにするか、またはGitBashというWindows上でLinuxコマンドが使えるようにするソフトをインストールする等して環境構築する必要があります。

  • 参考 : [https://stackoverflow.com/questions/47395181/install-bash-kernel-on-windows-for-using-in-jupyter:title]



余談ですが、以前はGitBashをインストールして使っておりましたが、バグったんでWSLでUbuntuを入れました。Linuxコマンドを使う理由はプログラマ達がPythonのブログでそれを使った操作を行っているからで、余儀なくされたというか・・・。androidMacOSLinuxコマンドを使うので勉強して損はないかな。



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を新規作成する

bashカーネルでNotebookを新規作成するには、

  • ブラウザの「Home Page」タブの右上の「新規」⇒「Bash」を選択するか、
  • もしくは開いたipynbファイルのツールバー「ファイル」⇒「新しいノートブック」⇒「Bash」を選択する

で新規にタブが開いてipynbファイルが作られます。

  • Pythonカーネル(ipykernel)で作ったファイルでは、

    • ブラウザのURL http://localhost:8888/notebooks/Untitled.ipynb?kernel_name=python3#
  • Bashカーネル(bash kernel)で作ったファイルでは、

    • ブラウザのURL http://localhost:8888/notebooks/Untitled1.ipynb?kernel_name=bash


になっています。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でカーネルのインストール、カーネルの追加方法



その他、参考リンク

Anaconda公式 bashカーネル





jupyterで使えるカーネル一覧

なんでもかんでも動くね。



「通常、カーネルは単一言語の実行のみを許可するが、いくつかの例外がある。」



Python製ドキュメントビルダー・静的サイトジェネレータSphinxの拡張ライブラリ

Jupyterカーネルに埋め込まれたコードをSphinxで読み込む場合に必要、と。



TypeScript(とJavaScript)をJupyter Notebookで動かして機械学習する



異なるNotebook間で変数を共有する方法

%storeというマジックコマンドを使うと別々のipynbファイル間で変数の共有ができるらしい。すご



以上です。