web-dev-qa-db-ja.com

コンダ環境でJupyterノートブックを使用する方法?

通常はjupyter notebookまたはjupyter-notebookまたはipython notebookターミナルで、Jupyter Notebook Webサーバーをローカルで起動します(ブラウザーでURLを開きます)。 condaconda environment を使用する場合、Jupyterノートブックを実行して、Pythonモジュールがconda環境にインストールされていますか?

どうやら thisisnotquitestraightforwardand多数ユーザー持っている類似トラブル

最も一般的なエラーメッセージは次のようです:conda環境にパッケージXYZをインストールした後my-env実行できるimport XYZ in a python console started in my-env、ただしJupyterノートブックで同じコードを実行すると、ImportErrorが発生します。

この質問は何度も尋ねられましたが、答えるのに適した場所はありません。ほとんどのQ&AとGithubチケットは非常に乱雑なので、 ここで新しいQ&Aを始めましょう

16
lumbric

免責事項:Ubuntuでのみテストされています。Windows/ Mac OSで何かが異なる場合はコメントしてください。


Jupyterは、kernelと呼ばれる別のプロセスでユーザーのコードを実行します。カーネルは、別のPythonインストール(別のconda環境またはvirtualenvまたはPython 2ではなくPython 3)または別の言語のインタープリター(例:JuliaまたはR)にすることができます。 。カーネルは、インタープリターと名前およびその他のパラメーターを指定することによって構成され( Jupyterのドキュメント を参照)、構成はシステム全体、アクティブな環境(またはvirtualenv)、またはユーザーごとに保存できます。静的に構成されたカーネルに加えて、_nb_conda_kernels_を使用すると、ipykernelがインストールされたconda環境ごとに個別のカーネルがJupyterノートブックで利用可能になります。

つまり、conda環境とJupyterの使用方法には3つのオプションがあります。

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

次のようなことをしてください:

_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
_

Jupyterはconda環境に完全にインストールされます。さまざまなバージョンのJupyterをさまざまなconda環境で使用できますが、このオプションは少々やり過ぎかもしれません。カーネルを環境に含めるだけで十分です。これは、コードを実行するコンポーネントのラッピングPythonです。 Jupyterノートブックの残りの部分はエディターまたはビューアーと見なすことができ、これをすべての環境に個別にインストールしてすべての_env.yml_ファイルに含める必要はありません。したがって、次の2つのオプションのいずれかをお勧めしますが、これが最も単純なオプションであり、間違いなく問題ありません。

オプション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
jupyter notebook                                           # run jupyter from system
_

カーネルの名前とconda環境は互いに独立していますが、同様の名前を使用することは意味があるかもしれません。

Pythonカーネルのみがconda環境内で実行され、システムからの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環境で、個別のカーネルが自動的に利用可能になります。

_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ノートブックで提供します。

_!jupyter-troubleshoot
_

これにより、上記の出力やインストールされたライブラリなどを含めることに関する多くの役立つ情報が出力されます。 Jupyterのインストールに関する質問についてヘルプを求める場合は、バグレポートや質問でこの情報を提供することをお勧めします。

構成されているすべてのJupyterカーネルを一覧表示するには、次のコマンドを実行します。

_jupyter kernelspec list
_

一般的なエラーとトラップ

Jupyterノートブックがconda環境にインストールされていない

注:症状は、ここで説明する問題に固有のものではありません。

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

説明:conda環境(オプション1、上記を参照)内からjupyterノートブックを実行しようとしました。このconda環境用のカーネルの構成はありません(これはオプション2です)とnb_conda_kernelsはインストールされていません(オプション3)が、_which jupyter_でそれが信じられたとしても、jupyterノートブックは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_を起動します( here も参照):

_ $ 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プロセスを開始するために発生します。 _/usr/bin/jupyter-notebook_のシバンは_#!/usr/bin/python3_であり、 動的ではありません _#!/usr/bin/env python_。したがって、Pythonはなんとかconda環境から抜け出します。 jupyterがShebangを無効にする代わりに_python /usr/bin/jupyter-notebook_を呼び出すことができると思いますが、システムのbinファイルと環境のpythonパスを混在させるとうまく機能しません。

解決策:conda環境内にjupyterノートブックをインストールします。

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

誤ったカーネル構成:カーネルはシステムPythonを使用するように構成されています

注:症状は、ここで説明する問題に固有のものではありません。

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

説明:通常、システムは、_/usr/bin/python3_を使用するように構成されたpython3(表示名「Python 3」)と呼ばれるカーネルを提供します。 _/usr/share/jupyter/kernels/python3/kernel.json_。これは通常、環境pythonバイナリ_/opt/miniconda3/envs/my-conda-env/bin/python_を指すconda環境のカーネルによってオーバーライドされます。どちらもipykernelパッケージによって生成されます( here および here を参照)。

_~/.local/share/jupyter/kernels/python3/kernel.json_のユーザーカーネル仕様は、システム全体のカーネルお​​よび環境カーネルをオーバーライドする場合があります。環境カーネルが見つからないか、ユーザーカーネルが環境オプション1の外にあるpythonインストールを指している場合(環境へのjupyterのインストール)は失敗します。

この問題とバリアントの発生と説明については、 hereherehere および hereherehere を参照してください。

解決策:_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_で環境が作成されているはずなので、インストールを確認することをお勧めします環境を再作成し、すべてのパッケージを再インストールしますか?)。

ユーザーのカーネル仕様が環境のカーネル仕様をブロックしている場合は、それを削除するか、_$PATH_を使用する相対pythonパスを使用して、使用する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

説明:各端末には一連の環境変数があり、端末を閉じると失われます。 conda環境を使用するには、特定の環境変数を設定する必要があります。これは、_conda activate my-conda-env_を使用してアクティブにすることによって行われます。 conda環境(オプション1)内からJupyterノートブックを実行しようとしたが、実行する前にconda環境をアクティブ化しなかった場合、システムのjupyterが実行される可能性があります。

ソリューション:Jupyterを実行する前にconda環境をアクティブ化します。

_ conda activate my-conda-env
 jupyter notebook
_

壊れたカーネル構成

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

説明:オプション2を使用しようとした場合、つまり、カーネルの明示的な構成を使用してシステムからJupyterを実行し、conda環境内でJupyterカーネルを実行した場合、しかし、期待どおりに動作しません。構成が 何らかの方法で破損している可能性があります

解決策:_~/.local/share/jupyter/kernels/my-kernel-name/kernel.json_の構成を確認し、間違いを手動で修正するか、ディレクトリ全体を削除して、上記のオプション2のコマンドを使用してディレクトリを再作成します。カーネル構成が見つからない場合は、_jupyter kernelspec list_を実行します。

Python 2と3

症状:不正なPythonバージョンのJupyterカーネルによるImportError または Python 2に関するその他の問題/ 3

説明:カーネル構成は、あらゆる種類の紛らわしい、誤解を招く影響を与える可能性があります。たとえば、デフォルトのPython 3カーネル構成では、Python 2で実行されている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が使用されます。

解決策:使用しないPython 2 ;-)

13
lumbric