python-如何在Jupyter noteb中设置环境变量
我有一个问题,Jupyter在bashrc文件中看不到env变量,有没有办法在jupyter中加载这些变量或向其中添加自定义变量?
8个解决方案
62 votes
要在jupyter笔记本中设置env变量,只需使用274870392321631919488魔术命令,例如274870392321631919489或%set_env490,例如%env MY_VAR=MY_VALUE949或%env MY_VAR MY_VALUE.(可单独使用%env MY_VAR=MY_VALUE9493打印当前环境变量。)
参见:[http://ipython.readthedocs.io/en/stable/interactive/magics.html]
michael answered 2020-02-15T13:27:10Z
15 votes
您可以按照以下步骤在代码中设置环境变量:
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中,有关更多信息,请参见此处。
kardaj answered 2020-02-15T13:27:35Z
8 votes
您还可以在LD_LIBRARY_PATH文件中设置变量:
如果每次启动jupyter内核时都需要相同的环境变量,特别是如果您有多组环境变量用于不同的任务,则我的解决方案很有用。
要使用环境变量创建新的ipython内核,请执行以下操作:
阅读[https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs]上的文档
运行LD_LIBRARY_PATH以查看包含已安装内核以及文件存储位置的列表。
将包含kernel.json的目录(例如名为LD_LIBRARY_PATH)复制到新目录(例如2748704777780593593665)。
在新的%set_env文件中更改LD_LIBRARY_PATH。
添加一个LD_LIBRARY_PATH字典,用于定义环境变量。
您的内核json可能看起来像这样(除了LD_LIBRARY_PATH和%set_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,该变量影响如何加载已编译的模块(例如,用C编写)。 使用%set_env设置此变量无效。
我可以在不同的环境中使用多个python内核。
要更改环境,我只需要切换/重新启动内核,而不必重新启动jupyter实例(很有用,如果我不想在另一个笔记本中松开变量)。 参见-但是-[https://github.com/jupyter/notebook/issues/2647]
Bernhard answered 2020-02-15T13:28:51Z
8 votes
如果您使用的是Python,则可以在.env文件中定义环境变量,然后使用python-dotenv从Jupyter笔记本中加载它们。
安装python-dotenv:
pip install python-dotenv
在Jupyter笔记本中加载.env文件:
%load_ext dotenv
%dotenv
aparkerlue answered 2020-02-15T13:29:20Z
2 votes
如果在启动笔记本电脑之前需要变量集,那么对我有用的唯一解决方案是env VARIABLE=$VARIABLE jupyter notebook和.bashrc中的export VARIABLE=value。
在我的情况下,tensorflow需要导出的变量才能成功将其导入到笔记本中。
Baschdl answered 2020-02-15T13:29:44Z
1 votes
如果您使用的是systemd,我刚刚发现您似乎必须将它们添加到systemd单元文件中。 这在Ubuntu 16上。将它们放入.profile和.bashrc(甚至/ etc / profile)中,导致juypter笔记本中不提供ENV Vars。
我不得不编辑:
/lib/systemd/system/jupyer-notebook.service
并放入我想在单位文件中读取的变量,例如:
Environment=MYOWN_VAR=theVar
只有这样,我才能从jupyter笔记本中阅读它。
Andy D answered 2020-02-15T13:30:18Z
1 votes
我遇到了一个陷阱:以下两个命令是等效的。 请注意,第一个不能使用引号。 有点违反直觉的,使用%env VAR ...时引用字符串会导致引号包含在变量值中,这可能不是您想要的。
%env MYPATH=C:/Folder Name/file.txt
和
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
evan_b answered 2020-02-15T13:30:42Z
0 votes
一个相关的(短期)解决方案是将环境变量存储在一个具有可预测格式的单个文件中,该文件可在启动终端和/或读入笔记本时获取。 例如,我有一个文件.env,该文件的环境变量定义的格式为.env(没有空白行或多余的空格)。 开始新的终端会话时,您可以在.bashrc或.bash_profile文件中获取此文件,并且可以使用类似以下内容的内容将其读入笔记本,
import os
env_vars = !cat ../script/.env
for var in env_vars:
key, value = var.split('=')
os.environ[key] = value
我使用相对路径显示此.env文件可以存在于任何位置,并且可以相对于包含笔记本文件的目录进行引用。 这也具有不在代码内的任何位置显示变量值的优点。
wingr answered 2020-02-15T13:31:08Z