【发布时间】:2016-10-19 20:13:08
【问题描述】:
我的问题是 Jupyter 在 bashrc 文件中看不到 env 变量,有没有办法在 jupyter 中加载这些变量或向其中添加自定义变量?
【问题讨论】:
标签: python bash environment-variables jupyter-notebook
我的问题是 Jupyter 在 bashrc 文件中看不到 env 变量,有没有办法在 jupyter 中加载这些变量或向其中添加自定义变量?
【问题讨论】:
标签: python bash environment-variables jupyter-notebook
要在 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
【讨论】:
os.environ[var] = val:github.com/ipython/ipython/blob/master/IPython/core/magics/…
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 设置此变量无效。【讨论】:
C:\Program Files (x86)\Graphviz2.38\bin\dot.exe 添加到现有系统路径?如果我不使用管理员帐户,它会起作用吗?我正在使用 Windows 10。
sys.executable,除非事先设置了 PYTHONEXECUTABLE,您必须在 python 运行之前设置它。
如果您使用的是 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,更多信息可以找到here
【讨论】:
%env MY_VAR=MY_VALUE 应该是这个问题的正确答案
我遇到的一个问题:以下两个命令是等效的。注意第一个不能使用引号。有点违反直觉,在使用 %env VAR ... 时引用字符串将导致引号被包含为变量值的一部分,这可能不是您想要的。
%env MYPATH=C:/Folder Name/file.txt
和
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
【讨论】:
如果您在启动笔记本之前需要设置变量,唯一对我有用的解决方案是 env VARIABLE=$VARIABLE jupyter notebook 和 .bashrc 中的 export VARIABLE=value。
在我的例子中,tensorflow 需要导出的变量才能成功地将其导入笔记本。
【讨论】:
如果您使用的是 systemd,我刚刚发现您似乎必须将它们添加到 systemd 单元文件中。这在 Ubuntu 16 上。将它们放入 .profile 和 .bashrc(甚至是 /etc/profile)会导致 enV Vars 在 juypter 笔记本中不可用。
我必须编辑:
/lib/systemd/system/jupyer-notebook.service
并将我想读取的变量放入单元文件中,例如:
Environment=MYOWN_VAR=theVar
只有这样我才能从 juypter notebook 中阅读它。
【讨论】:
一个相关的(短期)解决方案是将您的环境变量以可预测的格式存储在一个文件中,该文件可以在启动终端和/或读入笔记本时获取。例如,我有一个文件.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 文件可以存在于任何地方,并且可以相对于包含笔记本文件的目录进行引用。这还有一个优点是不会在代码中的任何地方显示变量值。
【讨论】:
如果您的 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)
【讨论】:
您可以使用 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
Url可以复制粘贴,如果你改变了,请验证端口。
创建一个笔记本并粘贴以下内容, 进入笔记本
!pip install python-dotenv
import dotenv
%load_ext dotenv
%dotenv
【讨论】: