1. ホーム
  2. python

conda環境でJupyter notebooksを使うには?

2023-11-25 11:48:30

質問内容

一般的に jupyter notebook または jupyter-notebook または ipython notebook をターミナルで実行します。 でJupyter notebookのWebサーバをローカルに起動します(URLはブラウザで開きます)。を使う場合 コンダ コンダ環境 , Jupyterノートブックを実行するための最良の方法は何ですか? インポートすることができるJupyterノートブックを実行する最良の方法は何ですか?

そのようです。 これ ではない かなり まっすぐ 前方 そして 多く ユーザー 持つ 似たような トラブル .

最も一般的なエラーメッセージは次のようなものです: conda 環境で XYZ パッケージをインストールした後、"After a package XYZ in a conda" と表示されます。 my-env を実行することができます。 import XYZ で起動したpythonコンソールで my-env で起動されますが、同じ のコードを Jupyterノートブックで同じコードを実行するとImportErrorが発生します。 .

この質問は何度もされていますが、それに答える良い場所がなく、ほとんどのQ&AやGithubのチケットはかなり混乱しています。 Github のチケットはかなり散らかっているので で新しい Q&A を始めましょう。 .

どのように解決するのですか?

*免責事項:UbuntuとWindowsでのみテストされています(この回答へのコメントを参照してください)、別のOSを使用しているときに何かが変更されている場合は、コメントしてください。


Jupyterはユーザーのコードを カーネル . カーネルは異なる カーネルは異なるPythonのインストール(異なるconda環境やvirtualenv、Python 3ではなくPython 2)、あるいは異なる言語(例えばJuliaやR)のインタプリタでも構いません。 3)、あるいは異なる言語(例えばJuliaやR)のインタプリタであってもかまいません。カーネルは次のようにして設定します。 カーネルはインタープリタと名前と他のパラメータを指定することで設定されます ( Jupyterドキュメント ) で、設定はシステム全体、アクティブな環境(またはvirtualenv)、またはユーザーごとに保存することができます。 ユーザーごとに保存できます。もし nb_conda_kernels が使われている場合、静的に設定されたカーネルに加えて、 それぞれの のあるコンダ環境では ipykernel がインストールされた各コンダ環境に対応した個別のカーネルがJupyterノートブックで利用可能になります。

要するに、conda環境とJupyterの使い方は3つあります。

オプション1: Jupyterサーバーとカーネルをconda環境内で実行する

のようなことをします。

conda create -n my-conda-env         # creates new virtual env
conda activate my-conda-env          # activate environment in terminal
conda install jupyter                # install jupyter + notebook
jupyter notebook                     # start server + kernel inside my-conda-env

Jupyter は conda 環境に完全にインストールされます。異なるバージョンのJupyterを異なるconda環境で使用することができます。 を使うこともできますが、このオプションは少しやりすぎかもしれません。カーネルを環境に含めるだけで十分です。 カーネルはコードを実行するPythonをラップするコンポーネントで、環境に含めるだけで十分です。 Jupyter notebookの残りの部分はエディタやビューアと考えることができ、これを環境ごとに個別にインストールしてインクルードする必要はありません。 環境ごとに個別にインストールし、すべての env.yml ファイルにインクルードする必要はありません。したがって のどちらかが望ましいかもしれませんが、これが最もシンプルで間違いなく良い方法です。

オプション 2: conda 環境のための特別なカーネルを作成する

のようなことをします。

conda create -n my-conda-env                               # creates new virtual env
conda activate my-conda-env                                # activate environment in terminal
conda install ipykernel                                    # install Python kernel in new conda env
ipython kernel install --user --name=my-conda-env-kernel   # configure Jupyter to use Python kernel

次に、システムインストールまたは別のconda環境からjupyterを実行します。

conda deactivate          # this step can be omitted by using a different terminal window than before
conda install jupyter     # optional, might be installed already in system e.g. by 'apt install jupyter' on debian-based systems
jupyter notebook          # run jupyter from system

カーネルの名前とconda環境の名前はそれぞれ独立していますが、似たような名前を使うのは理にかなっているかもしれません。

conda環境内で実行されるのはPythonカーネルのみで、Jupyterはシステムから、または別のconda環境が使用されます - conda環境内にはインストールされません。このため ipython kernel install を呼び出すと、jupyterはカーネルとしてconda環境を使用するように設定されます。 Jupyterドキュメント IPython ドキュメント を参照してください。ほとんどのLinuxのインストールでは、この設定は *.json の中のファイルです。 ~/.local/share/jupyter/kernels/my-conda-env-kernel/kernel.json :

{
 "argv": [
  "/opt/miniconda3/envs/my-conda-env/bin/python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "my-conda-env-kernel",
 "language": "python"
}

オプション3: nb_conda_kernels を使って conda 環境でカーネルを使用する

を使用する場合 パッケージ nb_conda_kernels がインストールされている場合、conda パッケージを含む各環境に対して自動的に個別のカーネルが利用可能になります。 を含む各コンダ環境に対して自動的に利用可能になります。 ipykernel または別のカーネル (R、Julia、...) を含む各コンダ環境に対して自動的に利用可能になります。

conda activate my-conda-env    # this is the environment for your project and code
conda install ipykernel
conda deactivate

conda activate base            # could be also some other environment
conda install nb_conda_kernels
jupyter notebook

カーネルを選択することができるはずです。 Python [conda env:my-conda-env] . なお nb_conda_kernels は conda を通してのみ利用可能で、 pip や apt のような他のパッケージマネージャでは利用できないようです。

トラブルシューティング

Linux/Macでコマンド which を実行すると、どのjupyterが使用されているかがわかります。 オプション1(conda環境からJupyterを実行)を使用している場合、conda環境からの実行可能ファイルである必要があります。 であるはずです。

$ which jupyter
/opt/miniconda3/envs/my-conda-env/bin/jupyter
$ which jupyter-notebook   # this might be different than 'which jupyter'! (see below)
/opt/miniconda3/envs/my-conda-env/bin/jupyter-notebook

ノートブックの中では、Pythonがconda環境からPythonのパスを使用していることがわかるはずです。

[1] !which python
/opt/miniconda3/envs/my-conda-env/bin/python
[2] import sys; sys.executable
'/opt/miniconda3/envs/my-conda-env/bin/python'
['/home/my_user',
 '/opt/miniconda3/envs/my-conda-env/lib/python37.zip',
 '/opt/miniconda3/envs/my-conda-env/lib/python3.7',
 '/opt/miniconda3/envs/my-conda-env/lib/python3.7/lib-dynload',
 '',
 '/opt/miniconda3/envs/my-conda-env/lib/python3.7/site-packages',
 '/opt/miniconda3/envs/my-conda-env/lib/python3.7/site-packages/IPython/extensions',
 '/home/my_user/.ipython']

Jupyterはコマンド jupyter-troubleshoot またはJupyter notebookで実行します。

!jupyter-troubleshoot

これは、上記の出力だけでなく、インストールされたライブラリなどを含む多くの有用な情報を表示します。Jupyterのインストールに関する質問をする際に Jupyterのインストールに関する質問で助けを求める場合、バグレポートや質問でこの情報を提供するのは良いアイデアかもしれません。

設定されているすべてのJupyterカーネルを一覧表示するには、以下を実行します。

jupyter kernelspec list

よくあるエラーとトラップ

Jupyter notebook が conda 環境にインストールされていない

注意: 症状はここで説明されている問題に固有のものではありません。

症状です。 Jupyter ノートブックで、conda 環境にインストールされたモジュール(システム全体にはインストールされていない)の ImportError が発生します。 しかし、Pythonのターミナルでインポートするとエラーになりません。

説明します。 jupyter notebookをconda環境の内部から実行しようとした場合 (オプション1、上記参照)、このconda環境用のカーネルの設定がない(これはオプション2)、nb_conda_kernelsがインストールされていない(オプション3)。 オプション2)、nb_conda_kernelsがインストールされていない(オプション3)、しかしjupyter notebookは(完全に)インストールされていない。 がインストールされていても、conda環境に which jupyter がそう思わせるかもしれませんが、jupyter notebook は conda 環境に (完全に) インストールされていません。

GNU/Linuxでは、次のように入力できます。 which jupyter と入力すると、Jupyterのどの実行ファイルが実行されているかを確認できます。

これは、Jupyterがインストールされていないため、システムのJupyterが使用されていることを意味します。

(my-conda-env) $ which jupyter-notebook
/usr/bin/jupyter

パスがconda環境内のファイルを指している場合、JupyterはJupyterの内部から実行されます。

(my-conda-env) $ which jupyter-notebook
/opt/miniconda3/envs/my-conda-env/bin/jupyter-notebook

なお、conda パッケージの ipykernel がインストールされると、実行可能な jupyter は出荷されますが 実行ファイルなし jupyter-notebook . これはつまり which jupyter は conda 環境へのパスを返します。 環境へのパスを返しますが jupyter notebook はシステムの jupyter-nootebook を起動します (参照 ここで ):

 $ conda create -n my-conda-env
 $ conda activate my-conda-env
 $ conda install ipykernel
 $ which jupyter            # this looks good, but is misleading!
 /opt/miniconda3/envs/my-conda-env/bin/jupyter
 $ which jupyter-notebook   # jupyter simply runs jupyter-notebook from system...
 /usr/bin/jupyter-notebook

このようなことが起こるのは jupyter notebook が検索するのは jupyter-notebook を見つけ /usr/bin/jupyter-notebook はそれを は新しい Python プロセスを開始します。のshebangは /usr/bin/jupyter-notebook#!/usr/bin/python3 であり はダイナミックではなく #!/usr/bin/env python . したがって、Pythonはcondaの環境から抜け出すことに成功します。jupyterなら python /usr/bin/jupyter-notebook を呼び出すこともできますが、システムのbinファイルと環境のpythonパスを混在させるのはいずれにせようまくいきません。 のbinファイルと環境のPythonのパスが混在するのは、いずれにせようまくいきません。

解決策です。 jupyter notebookをconda環境内にインストールします。

 conda activate my-conda-env
 conda install jupyter
 jupyter notebook

カーネルの設定に誤りがあります。カーネルはシステムのPythonを使用するように設定されています。

注意: 症状はここで説明されている問題に固有のものではありません。

症状です。 Jupyter ノートブックで、conda 環境にインストールされたモジュール(システム全体にはインストールされていない)の ImportError が発生します。 しかし、Pythonのターミナルでインポートするとエラーになりません。

説明します。 通常、システムは python3 (表示名 "Python 3") と呼ばれるカーネルを提供します。 を使うように設定されています。 /usr/bin/python3 を使うように設定されています。 /usr/share/jupyter/kernels/python3/kernel.json . これは通常 conda 環境のカーネルによって上書きされ、カーネルは環境の python バイナリ /opt/miniconda3/envs/my-conda-env/bin/python . どちらもパッケージによって生成されます ipykernel で生成されます (参照 はこちら はこちら ).

のユーザーカーネル仕様は ~/.local/share/jupyter/kernels/python3/kernel.json でのユーザカーネルの指定は、システム全体や環境カーネルを上書きする可能性があります。 を上書きする可能性があります。環境カーネルがない場合、またはユーザーカーネルが環境外の python のインストールを指している場合 が環境外の python インストールを指している場合、オプション 1 (環境内の jupyter のインストール) は失敗します。 は失敗します。

この問題の発生と議論、およびその変種については、以下を参照してください。 を参照してください。 , ここ , ここ そしてまた ここで , ここ そして はこちら .

解答です。 使用方法 jupyter kernelspec list を使って、アクティブなカーネルロケーションをリストアップします。

$ conda activate my-conda-env
$ jupyter kernelspec list
Available kernels:
  python3 /opt/miniconda3/envs/my-conda-env/share/jupyter/kernels/python3

環境にあるカーネルがない場合、手動で作成しようとすると ipython kernel install --sys-prefix を使って手動で作成することができます。 インストールを確認した方が良いでしょう。 conda install ipykernel が環境を作っているはずだからです。 (環境を再作成し、すべてのパッケージを再インストールしてみてはいかがでしょうか?).

ユーザーカーネル仕様が環境カーネル仕様をブロックしている場合、それを削除するか、または を使用する相対的な python パスを使用します。 $PATH を使ってどの python を使用します。 というわけで、こんな感じで全く問題ないはずです。

$ cat ~/.local/share/jupyter/kernels/python3/kernel.json
{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}

正しいconda環境が起動されていない

症状 Jupyter ノートブックや Python ターミナルで、conda 環境にインストールされたモジュール(システム全体にはインストールされていない)の ImportError が発生します。 JupyterノートブックやPythonターミナルではインストールされていない)。

説明します。 各ターミナルは環境変数のセットを持っており、ターミナルを閉じると失われます。 が閉じられると失われます。conda 環境を使用するために、特定の環境変数を設定する必要があります。 を使ってアクティブにすることで行われます。 conda activate my-conda-env . Jupyterをconda環境から実行しようとした場合(オプション1) ノートブックをconda環境内から実行しようとした場合(オプション1)、実行前にconda環境を有効化しなかった場合 を起動しなかった場合、システムのjupyterが実行される可能性があります。

解決方法 Jupyterを実行する前にconda環境を有効にしてください。

 conda activate my-conda-env
 jupyter notebook

壊れたカーネル設定

症状 奇妙なことが起こっています。おそらく上記と同様の症状、例:ImportError

説明してください。 オプション2、つまりJupyterをシステムから起動し、Jupyterカーネルをconda環境内で動作させようとした場合、カーネルに対する明示的な設定を使用することで、Jupyterカーネルをconda環境内で動作させることができます。 カーネルを明示的に設定し、conda環境内でJupyterカーネルを動作させるというものです。 が期待した動作をしない場合、その設定は 何らかの方法で .

解答です。 設定内容を確認する ~/.local/share/jupyter/kernels/my-kernel-name/kernel.json の設定を確認し、手動で修正するか、ディレクトリ全体を削除し、上記のオプション2のコマンドを使用して再作成してください。 を使って再作成してください。もしカーネル設定が見つからない場合は jupyter kernelspec list .

Python 2 と 3 の比較

症状です。 によるImportError。 JupyterカーネルのPythonのバージョンが間違っている。 または その他の問題 Python 2/3

説明 カーネル構成はあらゆる種類の混乱と誤解を招く効果を持つことができます。 例えば、デフォルトのPython 3カーネル構成では、Jupyterノートブックを起動することができます。 を起動することができます。

conda create -n my-conda-env
conda activate my-conda-env
conda install python=2
conda install jupyter
jupyter notebook

デフォルトの Python 3 カーネルです。

$ cat ~/.local/share/jupyter/kernels/python3/kernel.json
{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}

Python 3カーネルで新しいJupyter Notebookを作成した後、Jupyterが"Python 3"と表示しても、conda環境のPython 2が使用されます。 が表示されても、conda環境のPython 2が使用されます。

解決方法 Python2を使ってはいけない ;-)