Jupyter Notebook不读取jupyter_notebook_config.py中的代理设置,因其内核仅继承启动时shell的HTTP_PROXY等环境变量;有效方式是通过shell临时设置或永久写入~/.bashrc等配置文件。

不能直接在 jupyter_notebook_config.py 里设代理上网 —— Jupyter Notebook 本身不读取或响应 HTTP 代理配置项。 它的内核(如 Python kernel)继承的是启动时所在 shell 的环境变量,不是配置文件里的参数。硬往配置文件里写 http_proxy 之类字段,完全无效。
为什么 jupyter_notebook_config.py 不支持代理设置
Jupyter Notebook 的配置文件只控制服务端行为:绑定 IP、端口、密码、目录、是否开启 token 验证等。它不干预内核进程的网络行为。而真正发起 requests.get()、pip install、tfds.load() 这类请求的,是独立运行的 Python kernel 进程,它只认启动它的 shell 环境里的 HTTP_PROXY、HTTPS_PROXY 等变量。
- 你在 notebook 里执行
!echo $HTTP_PROXY,输出为空 → 说明 kernel 没拿到代理变量 - 你在终端里
export HTTP_PROXY=http://127.0.0.1:7890后再启动jupyter notebook→ kernel 才能继承该变量 - 修改
jupyter_notebook_config.py并重启服务,对网络请求毫无影响
真正有效的代理设置位置:shell 环境变量
必须让 Jupyter 启动前的 shell 已加载代理变量,kernel 才会继承。推荐两种可靠方式:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 临时生效(单次启动):
Linux/macOS:HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 jupyter notebook
Windows CMD:set HTTP_PROXY=http://127.0.0.1:7890 && set HTTPS_PROXY=http://127.0.0.1:7890 && jupyter notebook - 永久生效(所有终端启动的 Jupyter 都生效):
编辑~/.bashrc(或~/.zshrc),末尾追加:export HTTP_PROXY="http://127.0.0.1:7890"export HTTPS_PROXY="http://127.0.0.1:7890"export ALL_PROXY="socks5://127.0.0.1:7890"
然后运行source ~/.bashrc
容易被忽略的关键点:kernel 启动路径决定变量继承
如果你用 VS Code 或 PyCharm 点击按钮启动 Jupyter,它们往往不复用你终端里已 source 过的 shell 环境,导致代理失效。此时需额外操作:
- VS Code:在设置中搜
python.defaultInterpreter,确保选的是你配置过代理的 conda/env;更稳妥的是在 VS Code 终端里手动source ~/.bashrc && jupyter notebook - PyCharm:Settings → Tools → Python Console → Environment variables,手动填入
HTTP_PROXY和HTTPS_PROXY - 注意:某些代理工具(如 Clash、Shadowrocket)默认只监听
127.0.0.1,若你的 Jupyter kernel 在 Docker 或远程服务器跑,得改成监听0.0.0.0并开放对应端口
真正起作用的永远是进程启动那一刻的环境变量,而不是配置文件里的任何字段。别再往 jupyter_notebook_config.py 里徒劳地加 proxy 相关行了 —— 它们不会被解析,也不会被传递给 kernel。










