python os.getenv() 在 Jupyter 笔记本 (os x el Captain) 中看不到任何自定义变量

问题描述 投票:0回答:3

我在 bash 中声明了几个变量(通过 ~/.bash_profile),它们在 bash 本身以及在 bash 中启动的 python 中工作。

示例:

export PUIBy="Dropbox/CUSP/1_1_PUI/PUI_Bycicle_Research/"

但是,当我启动 Jupyter Notebook 时,

os.environ
看不到它们中的任何一个,显示一些默认的变量列表(PWD、SUDO_USER、USERNAME、JPY_PARENT_PID、SSH_AUTH_SOCK、SUDO_UID、GIT_PAGER 等)

我的系统是Mac OS El Captain,anaconda ipython 2.7

python bash environment-variables jupyter
3个回答
4
投票

其实这个问题与Jupyter无关。与不同的.bash文件如何加载更有关系。

引用自这里

.bash_profile 针对登录 shell 执行,而 .bashrc 针对交互式非登录 shell 执行。

当您通过控制台登录(输入用户名和密码)时,无论是坐在计算机前还是通过 ssh 远程登录:在初始命令提示符之前执行 .bash_profile 以配置您的 shell。

因为您将变量放入 .bash_profile 中,所以它仅在终端 shell 中可用,但在非交互式 shell 中不可用。

Jupyter-notebook 是一个 Web 应用程序,即使它在您的本地计算机上运行并且您从本地计算机访问它(在大多数情况下)。每次打开笔记本时,它都会在自己的非交互式 shell 中启动内核。因此,如果您希望环境变量在 shell 中可见,请将它们放入

.bashrc
文件中,而不是
.bash_profile

此外,要查看设置了哪些变量,请在 Jupyter 笔记本中使用

!export
命令


1
投票

尝试用

env
代替
export

例如:

env PUIBy="Dropbox/CUSP/1_1_PUI/PUI_Bycicle_Research/" jupyter notebook

来源:链接


0
投票

实际上,如果我使用 %%bash Jupyter 单元设置环境变量,然后尝试使用 os.getenv() 读回它们,我看不到它们。

如果我使用 os.setenv 在 python 中设置它们,然后使用 %%bash 回显它们并回显 $variablename 它们已正确设置。

从 zsh 启动运行 jupyter 笔记本的 macOS 15(不认为这有什么区别)

所以似乎存在一些不一致的行为

© www.soinside.com 2019 - 2024. All rights reserved.