如何在VS Code Remote-SSH环境下为Jupyter Notebook加载Shell脚本?
解决VS Code Remote-SSH中Jupyter Notebook无法加载环境变量的问题
问题核心
VS Code里的Jupyter Notebook和普通Python文件,运行时用的是非交互式、非登录Shell,不会加载ZSH自定义目录下的配置文件——这就是你把source env.profile放$ZSH_CUSTOM里,终端能用但Notebook没用的原因。
可行解决方案
1. 修改Jupyter内核配置(推荐)
直接让Jupyter内核启动时先加载环境变量:
- 找到你的Jupyter内核目录,一般是
~/.local/share/jupyter/kernels/下对应你用的Python版本的文件夹 - 打开里面的
kernel.json,把argv数组改成下面这样(替换成你的env.profile路径):{ "argv": [ "bash", "-c", "source /home/你的用户名/env.profile && python -m ipykernel_launcher -f {connection_file}" ], "display_name": "Python (带环境变量)", "language": "python" } - 保存后重启Jupyter内核,环境变量就会自动加载了
2. 给VS Code的Python/Jupyter指定启动参数
在VS Code的远程工作区设置里(按Ctrl+,打开设置,切换到Remote-SSH工作区标签),添加以下配置:
// 针对Python终端和Jupyter执行环境 "python.terminal.launchArgs": [ "-c", "source /path/to/env.profile && exec zsh" ], "jupyter.execution.interactiveShellArgs": [ "-c", "source /path/to/env.profile && exec zsh" ]
这样VS Code启动Python或Jupyter相关进程时,会先加载环境变量再启动Shell。
3. 用Python代码手动加载(应急用)
如果上面的方法都嫌麻烦,直接在Notebook第一个单元格运行这段代码:
import os def load_env(profile_path): with open(profile_path, 'r') as f: for line in f: line = line.strip() # 跳过注释和空行 if not line or line.startswith('#'): continue if '=' in line: key, val = line.split('=', 1) # 处理可能的引号 val = val.strip('\'"') os.environ[key] = val # 替换成你的env.profile路径 load_env('/home/你的用户名/env.profile')
这段代码会直接读取env.profile里的变量,注入到Python的环境中。
为什么之前的方法没用?
- 交互式终端是登录/交互式Shell,会加载ZSH的
$ZSH_CUSTOM、~/.zshrc等配置 - 但Jupyter/Python进程启动时用的是非交互式非登录Shell,只会加载最基础的配置文件(比如
~/.zshenv),甚至可能直接用sh启动,所以之前的配置不会生效
内容的提问来源于stack exchange,提问作者rorshan
相关产品推荐
相关产品推荐

