Jupyterがbashrcファイルにenv変数を表示できないという問題がありますが、これらの変数をjupyterにロードしたり、custome変数を追加する方法はありますか?
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
コードで環境変数を次のように設定できます。
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
Pythonを使用している場合、環境変数を.env
ファイルで定義し、 python-dotenv を使用してJupyterノートブック内から環境変数をロードできます。
Python-dotenvをインストールします。
pip install python-dotenv
Jupyterノートブックに.env
ファイルをロードします。
%load_ext dotenv
%dotenv
kernel.json
ファイルで変数を設定することもできます。私のソリューションは、jupyterカーネルを起動するたびに同じ環境変数が必要な場合、特に異なるタスク用の環境変数のセットが複数ある場合に役立ちます。
環境変数を使用して新しいipythonカーネルを作成するには、次の手順を実行します。
jupyter kernelspec list
を実行して、インストールされているカーネルとファイルの保存場所のリストを表示します。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":""}
}
LD_LIBRARY_PATH
を設定したかったのです。 %set_env
を使用してこの変数を設定しても機能しませんでした。ノートブックを起動する前に変数セットが必要な場合、私のために働いた唯一の解決策は、env VARIABLE=$VARIABLE jupyter notebook
in export VARIABLE=value
で.bashrc
でした。
私の場合、テンソルフローはノートブックにインポートするためにエクスポートされた変数を必要とします。
Systemdを使用している場合、systemdユニットファイルに追加する必要があるようです。 Ubuntu 16でこれを行います。それらを.profileおよび.bashrc(/ etc/profileでも)に入れると、juypterノートブックでENV Varが使用できなくなります。
編集する必要がありました:
/lib/systemd/system/jupyer-notebook.service
そして、私はユニットファイルで読みたい変数に入れます:
Environment=MYOWN_VAR=theVar
そしてそれから初めて、juypterノートブック内から読むことができました。
私が遭遇した落とし穴:次の2つのコマンドは同等です。最初のcannotは引用符を使用することに注意してください。やや直感に反して、%env VAR ...
を使用するときに文字列を引用すると、変数の値の一部として引用が含まれることになりますが、これはおそらく望んでいないことです。
%env MYPATH=C:/Folder Name/file.txt
そして
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
関連する(短期)ソリューションは、環境変数を単一のファイルに保存し、予測可能な形式で、端末の起動時に取得したり、ノートブックに読み込んだりできるようにすることです。たとえば、.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
ファイルがどこにでも存在し、ノートブックファイルを含むディレクトリに関連して参照できることを示しました。これには、コード内の変数値をどこにも表示しないという利点もあります。