Pythonの仮想環境を使っているが、Jupyter Notebookに入力したコードを仮想環境で実行できなくてお困りではないでしょうか?
Jupyter NotebookをインストールしてPython仮想環境を作成しただけでは、Jupyter Notebookに入力したコードを仮想環境の中で実行することはできません。これには、もう一手間必要になります。この記事では、Jupyter Notebookに入力したコードを特定の仮想環境で実行できるようにする方法について解説します。
Jupyter Notebookに入力したコードを特定のPython仮想環境で実行できるようになる。
ここで解説する作業を実施すると、Jupyter NotebookのGUIからコードをどの環境で実施するか選択できるようになります。もちろん、(仮想環境ではない)元々の環境も選択できますので、今までの作業に影響を与えることはありません。
作業もそれほど大変ではありません。
この記事の環境について
この記事の例は次の環境で実施しています。
- MacOS Monterey
- Python 3.11.6
ここでは次の環境が整っている前提で説明ます。
- Pythonのインストール
- Jupyter Nootbookのインストール(仮想環境にではなく、ローカルな環境にインストール)
Anacondaを使っている場合は、Jupyter Nootbookもインストールされています。もし、Jupyter Nootbookをインストールしていないなら、次のコマンドでインストールできます。
$ pip install jupyter
Jupyter Notebookのコードを仮想環境で実行できるようにする
STEP1:仮想環境を作成する
はじめにJupyter Nootbookを実行するPythonの仮想環境を作成します。すでに仮想環境がある場合、ここは読み飛ばしてもらって構いません。
ここでは仮想環境ツールとしてvenvを使用します。venvはPythonに同梱されていますので、追加のインストールなしで利用できます。virtualenvやcondaなど、他の仮想環境ツールを使っている場合、仮想環境の操作に関わる部分は使用しているツールの操作に読み替えてください。
venvツールの詳しい使い方を知りたい方は、次の記事をご参照ください。
それでは仮想環境を作成しましょう。仮想環境(のディレクトリ)を作成したい場所へ移動して、次のコマンドを実行します。
$ python3 -m venv myenv
ここではmyenvという名前で仮想環境を作成しましたが、この名前は任意なので好きな名前を付けてください。これでカレントディレクトリにmyenvというディレクトリが作成されます。
STEP2:仮想環境にIPythonカーネル(ipykernel)をインストール
仮想環境にIPythonのカーネル(ipykernel)をインストールします。
仮想環境にipykernelをインストールするため、仮想環境を有効化します。
$ source ./myenv/bin/activate
Windows環境の場合は次のコマンドで有効化します。
myenv\Scripts\activate.bat
その他の環境や異なる仮想化ツールを使っている場合は、それぞれの方法で仮想環境の有効化してください。
仮想環境を有効化できたら、仮想環境にipykernelをインストールします。
(myenv) $ pip install ipykernel
STEP3:IPythonカーネルをJupyter Notebookに認識させる
IPythonカーネル(ipykernel)をインストールしただけでは、Jupyter Notebookからこのカーネルを利用できません。Jupyter Notebook(やIPython)にこのカーネルを認識させるためにカーネルスペック(ディレクトリ)を作成する必要があります。
それには次のコマンドを実行します。仮想環境は有効化したままで実施します。
(myenv) $ python3 -m ipykernel install --user --name myenv --display-name "Python(myenv)"
「–user」オプションを付けると、カーネルスペック(ディレクトリ)をシステム全体の場所ではなく、ユーザーの場所にインストールします。このオプションは省略しても構いません。
「–name」オプションは複数のIPythonカーネルをインストールする場合は必須で、これにはユニークな名前をつける必要があります。この名前はカーネルを識別するために使われます。今回は追加で仮想環境にipykernelをインストールすることになるので、このオプションを指定する必要があります(1つ目のipykernelはJupyter Notebookをインストールしたときにインストールされているはずです)。
「–display-name」オプションに指定する名前はカーネルの表示名です。Jupyter Notebookでカーネルを選択するときになどにこの名前が使われます。このオプションは省略可能です。
これらオプションの詳細はヘルプで確認できます。ヘルプを表示するには次のコマンドを実行してください。
(myenv) $ python -m ipykernel install -h
以上で、Jupyter Notebookに入力したコードを仮想環境で実行する準備ができました。この後、コマンドラインから仮想環境は使用しませんので、次のコマンドを実行して仮想環境を無効化しても構いません。
(myenv) $ deactivate
カーネルスペックの一覧と削除
インストールされたカーネルスペックの一覧方法や削除方法も覚えておきましょう。
次のコマンドを実行すると、インストールされているカーネルスペックの一覧とそのインストールディレクトリが確認できます。
$ jupyter kernelspec list
jupyter kernelspec list
0.00s - Debugger warning: It seems that frozen modules are being used, which may
0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off
0.00s - to python to disable frozen modules.
0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.
Available kernels:
python3 /Users/taro/pyvenv/myenv/share/jupyter/kernels/python3
myenv /Users/taro/Library/Jupyter/kernels/myenv
仮想環境の削除などでカーネルスペックが必要なくなったら、次のコマンドで削除することができます。
$ jupyter kernelspec uninstall myenv
Jupyter NotebookでIPythonカーネルを切り替える
ここまでの作業でJupyter Notebookから仮想環境のIPythonカーネルを利用できるようになっています。実際にその方法を見ていきましょう。
Jupyter Notebookを起動して、Pythonのファイルを開きます。するとページの右上に現在選択されているカーネルが表示されます(下図を参照)。ここをクリックするとダイアログが表示されますので、使用するIPythonカーネルを選択して「Select」ボタンを押下します。今回はカーネルの表示名として「Python(myenv)」を設定しましたので、これを選択して「Select」ボタンを押下します。これでカーネルの切り替えは完了です。
あとはセルにコードを入力して実行すれば、コードは仮想環境の環境で実行されます。
まとめ
いかがでしたでしょうか。実際にやることは大したことなかったと思います。
今回はJupyter Notebookから仮想環境にインストールしたIPythonカーネルを使う前提で解説しましたが、おそらくJupyter Notebook以外のフロントエンドでも、ここに記載の方法で同じように仮想環境を使えるようになると思います。機会があったら試してみたいと思います。
しかし、今回の記事を書くため主に公式ドキュメントを参考にしましたが、いまいち分かりづらかったです。