[英]How to set env variable in Jupyter notebook
我的問題是 Jupyter 在 bashrc 文件中看不到 env 變量,有沒有辦法在 jupyter 中加載這些變量或向其中添加自定義變量?
要在 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
kernel.json
文件中設置變量:如果每次啟動 jupyter 內核時都需要相同的環境變量,我的解決方案很有用,特別是如果您有多組環境變量用於不同的任務。
要使用環境變量創建新的 ipython 內核,請執行以下操作:
jupyter kernelspec list
以查看包含已安裝內核和文件存儲位置的列表。python2
)復制到一個新目錄(例如python2_myENV
)。kernel.json
文件中的display_name
。env
字典。 您的內核 json 可能如下所示(我沒有從已安裝的 kernel.json 中修改任何內容,除了display_name
和env
):
{
"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,則可以在.env
文件中定義環境變量,並使用python-dotenv從 Jupyter 筆記本中加載它們。
安裝 python-dotenv:
pip install python-dotenv
在 Jupyter 筆記本中加載.env
文件:
%load_ext dotenv
%dotenv
您可以在代碼中設置環境變量,如下所示:
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
中,更多信息可以在這里找到
我遇到的一個問題:以下兩個命令是等效的。 注意第一個不能使用引號。 有點違反直覺,在使用%env VAR ...
時引用字符串將導致引號被包含在變量值的一部分中,這可能不是您想要的。
%env MYPATH=C:/Folder Name/file.txt
和
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
如果您在啟動筆記本之前需要設置變量,那么對我有用的唯一解決方案是env VARIABLE=$VARIABLE jupyter notebook
with export VARIABLE=value
in .bashrc
。
在我的情況下,tensorflow 需要導出的變量才能成功地將其導入筆記本。
一個相關的(短期)解決方案是將您的環境變量以可預測的格式存儲在單個文件中,該文件可以在啟動終端和/或讀入筆記本時獲取。 例如,我有一個文件.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
文件可以存在於任何地方,並且可以相對於包含筆記本文件的目錄進行引用。 這還有一個優點是不會在代碼中的任何地方顯示變量值。
如果您使用的是 systemd,我剛剛發現您似乎必須將它們添加到 systemd 單元文件中。 這在 Ubuntu 16 上。將它們放入 .profile 和 .bashrc(甚至是 /etc/profile)導致 ENV Vars 在 juypter 筆記本中不可用。
我不得不編輯:
/lib/systemd/system/jupyer-notebook.service
並將我想讀取的變量放入單元文件中,例如:
Environment=MYOWN_VAR=theVar
只有這樣我才能從 juypter notebook 中閱讀它。
如果您的 notebook 是由 Jupyter Hub 生成的,您可能需要配置(在jupyterhub_config.py
中)允許從 JupyterHub 進程環境轉移到 Notebook 環境的環境變量列表,方法是設置
c.Spawner.env_keep = [VAR1, VAR2, ...]
( https://jupyterhub.readthedocs.io/en/stable/api/spawner.html#jupyterhub.spawner.Spawner.env_keep )
另請參閱: Spawner.environment
您可以使用 docker 運行 jupyter notebook,並且不必管理依賴關系泄漏。
docker run -p 8888:8888 -v /home/mee/myfolder:/home/jovyan --name notebook1 jupyter/notebook
docker exec -it notebook1 /bin/bash
然后請向 jupyter 詢問打開的筆記本, jupyter notebook list
http://0.0.0.0:8888/?token=012456788997977a6eb11e45fffff _
網址可以復制粘貼,如果您更改了端口,請驗證端口。
創建一個筆記本並將以下內容粘貼到筆記本中
!pip install python-dotenv
import dotenv
%load_ext dotenv
%dotenv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.