我有一个问题,Jupyter在bashrc文件中看不到env变量,有没有办法在jupyter中加载这些变量或者为它添加自定义变量?
答案 0 :(得分:42)
要在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
答案 1 :(得分:14)
您可以在代码中设置环境变量,如下所示:
~.profile
这当然是临时修复,为了获得永久性修复,您可能需要将变量导出到String turnOrder;
do {
Scanner to = new Scanner(System.in);
turnOrder = to.nextLine();
if ((!"first".equalsIgnoreCase(turnOrder)) || (!"second".equalsIgnoreCase(turnOrder))) {
System.out.println("Type your answer as 'first' or 'second.' Without the punctuation.");
} else {}
} while ((!"first".equalsIgnoreCase(turnOrder)) || (!"second".equalsIgnoreCase(turnOrder)));
,可以找到更多信息here
答案 2 :(得分:5)
如果您使用的是Python,则可以在.env
文件中定义环境变量,然后使用python-dotenv从Jupyter笔记本中加载它们。
安装python-dotenv:
pip install python-dotenv
在Jupyter笔记本中加载.env
文件:
%load_ext dotenv
%dotenv
答案 3 :(得分:4)
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
,该变量影响如何加载已编译的模块(例如,用C编写)。使用%set_env
设置此变量无效。答案 4 :(得分:1)
如果您使用的是systemd,我发现您似乎必须将它们添加到systemd单元文件中。这在Ubuntu 16.将它们放入.profile和.bashrc(甚至是/ etc / profile)导致ENV Vars在juypter笔记本中不可用。
我必须编辑:
/lib/systemd/system/jupyer-notebook.service
并输入我想在单元文件中读取的变量,如:
Environment=MYOWN_VAR=theVar
然后才能从juypter笔记本中读取它。
答案 5 :(得分:1)
如果您在启动笔记本之前需要设置变量,那么唯一适用于我的解决方案是ClassNotFoundException : deploy.FinalJob
env VARIABLE=$VARIABLE jupyter notebook
export VARIABLE=value
。
在我的情况下,tensorflow需要导出的变量才能在笔记本中成功导入它。
答案 6 :(得分: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
文件可以存在于任何地方并且相对于包含该笔记本文件的目录被引用。这样做的好处是不会在代码中的任何位置显示变量值。
答案 7 :(得分:0)
我遇到了一个陷阱:以下两个命令是等效的。请注意,第一个不能使用引号。有点违反直觉的,使用%env VAR ...
时引用字符串会导致引号包含在变量值中,这可能不是您想要的。
%env MYPATH=C:/Folder Name/file.txt
和
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"