conda環境でJupyter notebooksを使うには?
質問内容
一般的に
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を使ってはいけない ;-)
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] エクスポートされた環境変数を削除する方法を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】IPython NotebookでPython 2.xとPython 3.xの両方を使用する場合
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] バブルソートの宿題
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] Django filter queryset __in for *every* item in list