web-dev-qa-db-ja.com

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

Jupyterがbashrcファイルにenv変数を表示できないという問題がありますが、これらの変数をjupyterにロードしたり、custome変数を追加する方法はありますか?

45
Ehab AlBadawy

Jupyterノートブックでenv変数を設定するには、%または%envのいずれかの%set_envマジックコマンドを使用します(例:%env MY_VAR=MY_VALUEまたは%env MY_VAR MY_VALUE)。 (%envを単独で使用して、現在の環境変数を出力します。)

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

61
michael

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

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にエクスポートする必要があります。詳細は here

16
kardaj

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

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

pip install python-dotenv

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

%load_ext dotenv
%dotenv
7
aparkerlue

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

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

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

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

カーネルjsonは次のようになります(display_nameおよびenvを除いて、インストールされているkernel.jsonから何も変更しませんでした)。

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

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

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

ノートブックを起動する前に変数セットが必要な場合、私のために働いた唯一の解決策は、env VARIABLE=$VARIABLE jupyter notebook in export VARIABLE=value.bashrcでした。

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

2
Baschdl

Systemdを使用している場合、systemdユニットファイルに追加する必要があるようです。 Ubuntu 16でこれを行います。それらを.profileおよび.bashrc(/ etc/profileでも)に入れると、juypterノートブックでENV Varが使用できなくなります。

編集する必要がありました:

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

そして、私はユニットファイルで読みたい変数に入れます:

Environment=MYOWN_VAR=theVar

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

1
Andy D

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

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

そして

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

関連する(短期)ソリューションは、環境変数を単一のファイルに保存し、予測可能な形式で、端末の起動時に取得したり、ノートブックに読み込んだりできるようにすることです。たとえば、.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ファイルがどこにでも存在し、ノートブックファイルを含むディレクトリに関連して参照できることを示しました。これには、コード内の変数値をどこにも表示しないという利点もあります。

0
wingr