使用 conda 环境内核 vscode 中的 Jupyter Notebooks 运行 中的陈旧环境变量

Stale environment variables in Jupyter Notebooks running in vscode using a conda environment kernel

我在 Ubuntu vscode 的 conda 环境中使用 jupyter,一切正常。但是,最近我遇到了 AWS 访问令牌在我的 jupyter 笔记本中过期的问题。

似乎这些访问令牌在代码环境或 jupyter 层中的某个级别得到了某种级别的缓存,但我不知道在哪里以及如何清理它。

示例:

我正在使用 aws-vault 生成可以在环境中访问的 SSO 凭据。

开始会话后,我可以从我的终端访问 AWS_SESSION_EXPIRATION

echo $AWS_SESSION_EXPIRATION

2022-04-20T17:40:36Z

当我启动时 vscode,打开一个终端,我得到了同样的结果。

当我激活我的环境时,运行

python -c "import os;print(os.environ['AWS_SESSION_EXPIRATION'])"

我也一样。

但是,当我打开一个新的jupyter notebook和select相同的环境,并且运行

import os
print(os.environ['AWS_SESSION_EXPIRATION'])

我明白了

2022-04-06T11:09:03Z

我尝试在 conda env 或 jupyter 扩展中找到任何可以缓存 env 变量的文件。我也试过重新启动 vscode 和机器本身 - 都没有成功。

谁能帮我清理一下?

谢谢!!

编辑:

另一个例子:

如果我在终端中设置

export FOO=BAR

然后我可以在 vscode.

内通过终端和 jupy notebook 按预期访问 $FOO

然后我关闭vscode,运行

unset FOO

重启机器,启动vscodenew,打开一个同样conda环境的新notebook

内,运行宁

import os
print(os.environ['FOO'])

仍然 returns BAR

似乎有 an issue in the vscode-jupyter 扩展,它以某种方式将环境变量存储在 kernel.json 文件中。

在撰写本文时,问题仍未解决。在 ubuntu、this workaround 中从问题的线程中工作对我有用:

  1. Close code completely
  2. find ~/.vscode/extensions/ms-toolsai.jupyter*
  3. code .
  4. Run a notebook and it will pick up the changes.

关闭 vscode 后,发出以下命令删除缓存:

find ~/.vscode/extensions/ms-toolsai.jupyter* -name kernel.json -delete

来源:https://github.com/microsoft/vscode-jupyter/issues/9774#issuecomment-1110328329