Jupyterノートブックで環境変数を設定する方法


回答:


120

Jupyter Notebookで環境変数を設定するに%は、%envまたは%set_env、たとえば、%env MY_VAR=MY_VALUEまたはのいずれかの魔法のコマンドを使用します%env MY_VAR MY_VALUE。(%env現在の環境変数を印刷するために単独で使用します。)

参照:http//ipython.readthedocs.io/en/stable/interactive/magics.html


単に見積もりを試したことがありますか?os.environの変更は同じではないことに注意してください。変更できるのは、(メモリ内の現在のpythonプロセス内の)dictのみであり、文字通りOS env varを設定することはありません(後続の!shellコマンドなど)。
マイケル2018年

2
私は、彼らは非常に正確でなかったとして、私の以前のコメントを削除した-しかし、注目すべきこと%envおよび%set_env魔法のコマンドを使用してos.environ[var] = valバックエンドで:github.com/ipython/ipython/blob/master/IPython/core/magics/...
evan_b

2
@michaelすべてのノートブックで環境を維持する方法はありますか?このように環境を設定すると、現在のノートブックの環境のみが維持されるようです。
JamesWierzba19年

34

kernel.jsonファイルに変数を設定することもできます。

私のソリューションは、jupyterカーネルを起動するたびに同じ環境変数が必要な場合、特に異なるタスクに複数の環境変数のセットがある場合に役立ちます。

環境変数を使用して新しいipythonカーネルを作成するには、次の手順を実行します。

  • https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specsでドキュメントを読んでください
  • 実行jupyter kernelspec listして、カーネルがインストールされているリストとファイルが保存されている場所を確認します。
  • kernel.jsonを含むディレクトリ(例:named python2)を新しいディレクトリ(例python2_myENV)にコピーします。
  • display_name新しいkernel.jsonファイルでを変更します。
  • env環境変数を定義する辞書を追加します。

あなたのカーネルJSONは(私は除いて、インストールkernel.jsonから何も変更しなかった。このようになりますdisplay_nameenv):

{
 "display_name": "Python 2 with environment",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "env": {"LD_LIBRARY_PATH":""}
}

このアプローチのユースケースと利点

  • 私のユースケースでは、LD_LIBRARY_PATHコンパイルされたモジュール(Cで記述されたものなど)のロード方法に影響を与える変数を設定したいと思いました。を使用%set_envしてこの変数を設定することはできませんでした。
  • 異なる環境で複数のPythonカーネルを持つことができます。
  • 環境を変更するには、カーネルを切り替えて再起動するだけですが、jupyterインスタンスを再起動する必要はありません(別のノートブックの変数を失いたくない場合に便利です)。-ただし-https ://github.com/jupyter/notebook/issues/2647を参照してください

C:\Program Files (x86)\Graphviz2.38\bin\dot.exe提案された手法を使用して既存のシステムパスに追加する方法を教えてください。管理者アカウントを使用していない場合でも機能しますか?私は、Windows 10使用しています
Khurram Majeed

まさに私が必要としていたもの。HomebrewのPythonは、Pythonを実行する前に設定する必要がある事前に設定されていsys.executableない限りPYTHONEXECUTABLE、上書きされます。
StefanDragnev19年

私の意見では、これが唯一の正解です。特定のカーネルで使用可能な機能に依存するのではなく、Jupyter自体のみを使用するためです。
shadowtalker

20

Pythonを使用している場合は、.envファイルに環境変数を定義し、python-dotenvを使用してJupyterノートブック内からそれらをロードできます。

python-dotenvをインストールします。

pip install python-dotenv

.envJupyterノートブックにファイルをロードします。

%load_ext dotenv
%dotenv

17

次のように、コードで環境変数を設定できます。

import sys,os,os.path
sys.path.append(os.path.expanduser('~/code/eol_hsrl_python'))
os.environ['HSRL_INSTRUMENT']='gvhsrl'
os.environ['HSRL_CONFIG']=os.path.expanduser('~/hsrl_config')

これはもちろん一時的な修正であり、永続的な修正を取得するには、おそらく変数をにエクスポートする必要があります~.profile。詳細については、こちらをご覧ください。


2
Kardajに感謝します。〜 / .profileで変数をエクスポートすると解決しましたが、bashrcから読み取っていないようです。これはちょっと奇妙です。
Ehab AlBadawy 2016年

3
マイケルの答えは%env MY_VAR=MY_VALUE、この質問に対する正しい答えであるはずです
SidaZhou18年

@SidaZhouなぜマイケルの答えが良いのですか?
彼は

2
@SidaZhouはユースケースに依存します-信用をenvで利用できるようにしたい場合-そしてあなたのノートブックに信用を入れたくない場合(例えばソース管理上)、これは理想的ではありません。
モーガンイックス

4

あなたはノートブックを開始している前に、変数セットが必要な場合は、私のために働いた唯一のソリューションでしたenv VARIABLE=$VARIABLE jupyter notebookexport VARIABLE=valueの中で.bashrc

私の場合、テンソルフローはノートブックに正常にインポートするためにエクスポートされた変数を必要とします。


3

私が遭遇した落とし穴:次の2つのコマンドは同等です。最初のもの引用符を使用できないことに注意してください。やや直感に反して、使用時に文字列を引用する%env VAR ...と、引用符が変数の値の一部として含まれることになりますが、これはおそらくあなたが望むものではありません。

%env MYPATH=C:/Folder Name/file.txt

そして

import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"

1

systemdを使用している場合は、systemdユニットファイルに追加する必要があるようです。これはUbuntu16で行われます。それらを.profileと.bashrc(/ etc / profileでさえ)に入れると、ENVVarがjuypterノートブックで使用できなくなりました。

私は編集しなければなりませんでした:

/lib/systemd/system/jupyer-notebook.service

そして、私が読みたい変数を次のようにユニットファイルに入れます。

Environment=MYOWN_VAR=theVar

そうして初めて、juypterノートブック内からそれを読むことができました。


0

関連する(短期的な)解決策は、環境変数を予測可能な形式で単一のファイルに保存することです。このファイルは、端末の起動時やノートブックへの読み込み時に取得できます。たとえば.env、環境変数の定義がVARIABLE_NAME=VARIABLE_VALUE(空白行や余分なスペースがない)形式のファイルがあります。新しいターミナルセッションを開始するときに、.bashrcまたはファイルでこのファイル.bash_profileを入手できます。これを次のようなノートブックに読み込むことができます。

import os
env_vars = !cat ../script/.env
for var in env_vars:
    key, value = var.split('=')
    os.environ[key] = value

相対パスを使用して、この.envファイルがどこにでも存在し、ノートブックファイルを含むディレクトリを基準にして参照できることを示しました。これには、コード内の変数値をどこにも表示しないという利点もあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.