はじめに
Pythonのバージョン別に仮想環境を作って、jupyterのカーネルに登録したにもかかわらず、Pythonのバージョンが切り替わらない件について、いろいろやったときの備忘録を残しておく。
基本のおさらい
python 3.7とpython 3.8とpython 3.9の仮想環境を作る
conda create -n py37 python=3.7 jupyterlab
conda create -n py38 python=3.8 jupyterlab
conda create -n py39 python=3.9 jupyterlab
それぞれの仮想環境(py37とpy38とpy39)をjupyterカーネル(py37とpy38とpy39という名前)で登録する
ipython kernel install --user --name=py37 --display-name=py37
ipython kernel install --user --name=py38 --display-name=py38
ipython kernel install --user --name=py39 --display-name=py39
つまづいたポイント
ipython kernel installを唱えると、唱えた仮想環境のベースのpython環境(バージョン)がjupyterカーネルのpython環境として登録される模様。このとき、仮想環境のライブラリはそのまま参照されるため、pythonとライブラリのバージョンの不一致が起きる(知らないとハマる)。したがって、仮想環境をjupyterカーネルで登録するときに、登録したい仮想環境をアクティベートした上でipython kernel installを唱えるのがよい。
# よい例
(base) C:\\hogehoge>conda activate py37
(py37) C:\\hogehoge>ipython kernel install --user --name=py37 --display-name=py37
(py37) C:\\hogehoge>conda activate py38
(py38) C:\\hogehoge>ipython kernel install --user --name=py38 --display-name=py38
(py38) C:\\hogehoge>conda activate py39
(py39) C:\\hogehoge>ipython kernel install --user --name=py39 --display-name=py39
# 悪い例 (base)のpythonバージョンが引き継がれる
(base) C:\\hogehoge>ipython kernel install --user --name=py37 --display-name=py37
(base) C:\\hogehoge>ipython kernel install --user --name=py38 --display-name=py38
(base) C:\\hogehoge>ipython kernel install --user --name=py39 --display-name=py39
省略すなということですな。
おまけ
python環境とライブラリの環境がアンマッチしていないかはjupyterで以下のスクリプトを実行すると確認できる。
import sys
print(sys.path) # ライブラリのパス
print(sys.executable) # pythonのパス(バージョンの確認であればsys.versionでも可)
また、カーネルの設定はkernel.jsonに保存されており、argv属性の一番目に使用するpythonのパスが記載されている。強制的に書き換えることも可能。(非推奨) なお、AppDataは隠しフォルダとなっている。
C:\hogehoge\AppData\Roaming\jupyter\kernels\py38\kernel.json