粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

anacondaを使った仮想環境上のjupyterがmoduleをimportできない問題の解決 / jupyter上で環境を切り替える

起こった問題

  • condaで作った仮想環境上であるパッケージ(lightgbm)をインストールした
  • コマンドライン上で起動したpython環境では動く
  • がjupyter notebook上からはそのようなmoduleはないと言われた

要は入れたはずのライブラリがnotebookからインポートできないという状況になりました。

原因

  • 仮想環境上にはjupyterを入れてなかった
  • base環境のjupyterが起動し,仮想環境上でのライブラリ追加が

解決策

したがって簡単なことですが,これだけです。

  • 仮想環境上にjupyter notebookを入れる。
conda install jupyter notebook

余談ですが,juptyerのnotebook上でも戦闘に!をつけた行はコマンドライン上の入力として実行されるので,notebook上で

!pip install ~~

と実行しても良いです。

ただし,condaはyes/noの入力が必要になるので

!echo y|conda install ~~

とすること。

注意点:condaとpipをまぜるな

anacondaとpipでは扱うパッケージの形式が異なり,混ぜると環境を壊す恐れがあります。

https://cdn.juku.st/entry_images/5368/original/3c02421dae59735fbe1a9e2ee17958227702cc65.jpg

https://insilico-notebook.com/conda-pip-install/

jupyter上で仮想環境を切り替えられるようにする

バクを調べてる時に知ったのですが,jupyer上でKernel→Change Kernelの欄から仮想環境を切り替えることができて非常に便利です。

qiita.com

手順概略

手順は,

  1. base環境で,pip install environment_kernels
  2. jupyter notebook --generate-configで.jupyter以下に設定を作成(すでに出ている場合は変更なし)
  3. 生成されるjupyter_notebook_config.pyに下記を追記
c.NotebookApp.kernel_spec_manager_class = 'environment_kernels.EnvironmentKernelSpecManager'
c.EnvironmentKernelSpecManager.env_dirs=['C:/Program Files/Anaconda3/envs/'] # envsが保存されている場所

最後に使いたい環境にjupyterを入れpip install environment_kernelsを実行で完了です。

condaとpipをまぜるなといったそばからこれですが,environment_kernelsをcondaで入れている文献を見てないので仕方なくやってます。 best solutionでないのは確か。

ハマリぽいんと

3つ目の手順でenvsが保存されている場所というのが厄介で,windows機の場合,\エスケープする必要があります。

したがって,わたしの場合は

c.EnvironmentKernelSpecManager.conda_env_dirs = [ 'C:\\Users\\username\\AppData\\Local\\conda\\conda\\envs\\' ]

としなくてはいけませんでした。あと,最後に仮想環境上でのpip installを忘れないようにというのもポイントです。

これができると,環境ごとにコマンドプロンプトを立ち上げなくていいので気持ちが楽になります。