Jupyter Notebook如何将bash子进程环境变量导入当前运行环境
问题解答
环境变量跨单元格可用性说明
- 直接在新的
%%bash单元格使用前面export的PROJECT变量不可行 - 原因:每个
%%bash魔法命令都会启动独立的bash子进程,子进程的环境变量仅在当前进程生命周期内有效,既无法向上传递给Jupyter内核父进程,也无法共享给其他单元格启动的新子进程 - 你给出的第二个单元格的输出为:
因新子进程内无NewPROJECT变量定义,变量会被解析为空值。
变量导入Jupyter运行环境的实现方法
最常用的方案是通过Python捕获命令输出,再写入Jupyter内核的全局环境变量,后续所有子进程都会继承该环境变量,操作示例如下:
- 先执行Python单元格捕获并设置变量
import os # 调用gcloud命令获取项目ID,去除结果首尾空白符 project_id = !gcloud config list project --format "value(core.project)" os.environ["PROJECT"] = project_id[0].strip()
- 后续任意
%%bash单元格都可以直接读取该变量
%%bash echo New $PROJECT
此时输出会正常显示GCP项目ID。
如果需要在%%bash块内完成多步计算再导出变量,也可以将变量值写入临时文件,再通过Python读取写入全局环境变量:
%%bash # 假设在bash块内完成了复杂计算得到变量 PROJECT=$(gcloud config list project --format "value(core.project)") echo $PROJECT > /tmp/gcp_project.tmp
import os with open("/tmp/gcp_project.tmp", "r") as f: os.environ["PROJECT"] = f.read().strip()
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

