通常、ターミナルでjupyter notebook
またはjupyter-notebook
を実行しipython notebook
て、Jupyterノートブックウェブサーバーをローカルで起動します(そしてブラウザでURLを開きます)。コンダそしてconda 環境、conda 環境にインストールされた Python モジュールをインポートできる Jupyter ノートブックを実行する最適な方法は何ですか?
それが思われるよう、これ は ない とても 真っ直ぐ フォワード そして 多くの ユーザー 持っている 似ている トラブル。
最も一般的なエラーメッセージは次のようです。conda環境にパッケージXYZをインストールした後、pythonコンソールでmy-env
実行できますが、import XYZ
my-env
Jupyterノートブックは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 環境の個別のカーネルがipykernel
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 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 install
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-troubleshoot
Jupyter は、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 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プロセスを開始します。のシェバン/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 が使用されます。