在 VS Code 中连接 Google Cloud 托管 Jupyter:Workbench Notebooks 扩展的使用思路

2026-07-15 41 预计阅读时间: 1 分钟
来源: infoq.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

Google Cloud Workbench Notebooks 扩展把本地 VS Code 与 Google Cloud 上的托管 Jupyter Notebook 环境连接起来。对开发者而言,这意味着代码编辑、搜索、版本控制等工作可以留在熟悉的本地 IDE 中,而 Notebook 的内核、依赖和计算资源则由云端环境承载。

本地编辑器与云端运行环境各司其职

传统 Notebook 工作流通常要求开发者在浏览器页面中完成编辑和执行。浏览器适合交互式探索,但当项目逐渐包含 Python 模块、配置文件、测试和 Git 分支时,完整 IDE 往往更高效。

Workbench Notebooks 扩展解决的是开发入口问题:开发者可以从 VS Code 连接托管的 Jupyter 环境,不必把 Notebook 的编辑体验限制在浏览器中。由此形成的工作模式可以概括为:

  • VS Code 负责文件编辑、代码导航、重构和版本控制。
  • Google Cloud 上的托管环境提供 Jupyter 内核及其计算资源。
  • Notebook 仍然保留逐单元执行、查看中间结果和数据探索的交互方式。

需要注意,编辑器运行在本地,并不代表代码也在本地执行。判断文件路径、依赖版本、CPU 或 GPU 类型以及访问权限时,应以当前连接的 Notebook 内核为准。

连接前要确认的三类状态

扩展负责建立开发入口,但连接能否正常工作仍取决于云资源、身份和运行环境。

身份与项目

可以先在本地终端检查 Google Cloud CLI 当前使用的账号和项目。下面的命令不代表扩展必须依赖这些配置,但适合作为排查身份问题的起点:

gcloud auth list
gcloud config get-value project
gcloud config list account

如果项目不正确,可以这样调整,其中 YOUR_PROJECT_ID 需要替换为实际项目 ID:

gcloud config set project YOUR_PROJECT_ID

实际连接步骤、所需权限和扩展中的资源选择界面,应以组织策略及当前版本的扩展说明为准。

内核与依赖

同一个 .ipynb 文件连接到不同内核时,可能得到完全不同的结果。连接成功后,应确认 Python 可执行文件、解释器版本和关键依赖,而不是默认云端环境与本地一致。

数据位置

代码在云端内核执行时,./data 指向的是云端运行环境中的相对路径,不是本地工作站的目录。依赖本地文件的 Notebook 需要显式同步数据,或者改为访问对象存储、数据库等云端数据源。

可以这样实践:运行一段环境探针

由于来源摘要没有给出扩展的具体 API,下面示例不假设任何专有接口。它是一段可直接放入 Notebook 单元执行的 Python 环境探针,用来确认代码究竟在哪里运行,以及当前内核具备哪些基础资源。

from __future__ import annotations

import json
import os
import platform
import socket
import sys
from pathlib import Path


def build_report() -> dict[str, object]:
    return {
        "hostname": socket.gethostname(),
        "python": sys.version.split()[0],
        "executable": sys.executable,
        "platform": platform.platform(),
        "working_directory": str(Path.cwd()),
        "cpu_count": os.cpu_count(),
        "visible_files": sorted(p.name for p in Path.cwd().iterdir())[:20],
    }


print(json.dumps(build_report(), indent=2, ensure_ascii=False))

运行后重点查看:

  • hostname 是否对应预期的云端环境。
  • executable 是否指向预期的 Python 环境。
  • working_directory 与 Notebook 中使用的相对路径是否一致。
  • visible_files 是否包含项目所需文件。

还可以增加一个最小依赖检查单元,尽早暴露环境漂移:

from importlib.metadata import PackageNotFoundError, version

required_packages = ["jupyter", "numpy", "pandas"]

for package in required_packages:
    try:
        print(f"{package}=={version(package)}")
    except PackageNotFoundError:
        print(f"{package}: NOT INSTALLED")

如果项目依赖固定版本,可以将结果与仓库中的 requirements.txt 或锁文件对照。不要仅在 Notebook 单元里临时安装依赖后就结束工作,因为重启或更换托管环境后,这些变更未必仍然存在。

把 Notebook 纳入工程流程

连接云端 Notebook 后,最容易被忽略的问题不是连接本身,而是可复现性。一个可维护的项目可以采用如下结构:

ml-project/
├── notebooks/
│   └── exploration.ipynb
├── src/
│   └── features.py
├── tests/
│   └── test_features.py
├── requirements.txt
└── README.md

Notebook 用来组织实验和展示结果,稳定的数据处理逻辑则移动到 src/,并通过测试固定行为。这样,VS Code 的代码导航和测试能力可以真正参与工作流,而不是只充当 Notebook 的另一个界面。

例如,Notebook 中可以调用项目模块:

from src.features import normalize

values = [10.0, 15.0, 20.0]
print(normalize(values))

这里假设项目目录已经出现在云端环境中,并且仓库根目录位于 Python 导入路径。具体文件同步或仓库检出方式需要根据团队的 Google Cloud 环境进行配置。

上线前的检查清单

采用这一工作流时,建议确认以下事项:

  • VS Code 连接的是正确的 Google Cloud 项目和托管 Notebook 环境。
  • Notebook 当前选择的内核、Python 版本和依赖符合项目要求。
  • 本地文件与云端文件的边界已经明确,不依赖隐式路径。
  • 凭据没有写入 Notebook、输出单元或 Git 仓库。
  • 长时间运行的内核能够被识别并及时停止,避免闲置资源持续产生费用。
  • 关键逻辑已经移出 Notebook,并由普通 Python 测试覆盖。

Workbench Notebooks 扩展的核心价值不是改变 Jupyter 的计算模型,而是让云端 Notebook 更自然地进入本地 IDE 工作流。真正决定体验是否可靠的,仍然是身份权限、环境一致性、数据位置和项目可复现性。


相关推荐