conda環境でJupyterノートブックを使用するにはどうすればいいですか? 質問する

conda環境でJupyterノートブックを使用するにはどうすればいいですか? 質問する

通常、ターミナルでjupyter notebookまたはjupyter-notebookを実行しipython notebookて、Jupyterノートブックウェブサーバーをローカルで起動します(そしてブラウザでURLを開きます)。コンダそしてconda 環境conda 環境にインストールされた Python モジュールをインポートできる Jupyter ノートブックを実行する最適な方法は何ですか?

それが思われるよう、これ ない とても 真っ直ぐ フォワード そして 多くの ユーザー 持っている 似ている トラブル

最も一般的なエラーメッセージは次のようです。conda環境にパッケージXYZをインストールした後、pythonコンソールでmy-env実行できますが、import XYZmy-envJupyterノートブックはImportErrorを引き起こします

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

ベストアンサー1

免責事項: ATM は Ubuntu と Windows でのみテストされています (この回答へのコメントを参照してください)。


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

つまり、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 inside my-conda-env

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

次に、システム インストールまたは別の 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環境にインストールされていません。jupyterを呼び出すと、ipython kernel installconda環境をカーネルとして使用するように設定されます。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_kernelsconda 経由でのみ利用可能であり、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-troubleshootJupyter は、Jupyter ノートブックで次のコマンドまたはコマンドを提供します。

!jupyter-troubleshoot

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

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

jupyter kernelspec list

よくある間違いと落とし穴

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

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

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

説明:conda 環境内から jupyter ノートブックを実行しようとしましたが (オプション 1、上記を参照)、この conda 環境のカーネルの構成がなく (これはオプション 2)、nb_conda_kernels がインストールされていません (オプション 3)。ただし、jupyter ノートブックは conda 環境に (完全に) インストールされていません (インストールされwhich jupyterていると思われるかもしれません)。

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 jupyterconda環境へのパスが返されますが、システムの(も参照)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プロセスを開始します。のシェバン/usr/bin/jupyter-notebook#!/usr/bin/python3ダイナミックではない #!/usr/bin/env pythonしたがって、Python は conda 環境から抜け出すことができます。jupyter はpython /usr/bin/jupyter-notebook代わりに を呼び出してシェバンを無効にすることができると思いますが、システムの bin ファイルと環境の python パスを混在させると、いずれにしてもうまく機能しません。

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

 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。これは通常、環境の python バイナリ を指す conda 環境のカーネルによって上書きされます/opt/miniconda3/envs/my-conda-env/bin/python。どちらもパッケージによって生成されますipykernel(を参照)。ここそしてここ)。

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

この問題とその変種の発生と議論については、ここここここそしてまたここここそしてここ

解決: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 環境内から Jupyter ノートブックを実行しようとしたが (オプション 1)、実行前に 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

症状:インポートエラーのためJupyterカーネルのPythonバージョンが間違っているまたは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 は使用しないでください ;-)

おすすめ記事