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 工作流。真正决定体验是否可靠的,仍然是身份权限、环境一致性、数据位置和项目可复现性。