生成 Jupyter/Colab 笔记本

nbgenerate 工具可转换 DevSite HTML 和 Markdown 内容和模板 转换为与 Colab 兼容的 Jupyter 笔记本。

OverView

Google Colab 网站上:

Colab 笔记本可让您将可执行代码和富文本合并到一个 以及图片、HTML LaTeX 等。

在 Colab 中,您可以通过网络浏览器编写和执行 Python 代码, 额外设置或安装。Markdown 内容可以夹杂代码 单元格以允许在同一文档中提供富媒体内容。这使得 Colab 笔记本是一种广受欢迎的解决方案,不仅用于定量研究和 还可用于演示和实验 API 和 概念,比如开发者文档中常见的概念。

因此,Colab 笔记本中分享的内容通常与 Google 开发者文档中发布的内容重叠。nbgenerate 工具消除了 需要手动将 DevSite 标记与支持的 Colab 笔记本同步。工具 将 DevSite HTML 和 Markdown 转换为 Colab 使用的 .ipynb 文件格式,并且 其他 Jupyter 笔记本实现。这样一来,开发者文档和 Colab 记事本就可以使用 DevSite 内容作为单一可信来源。

如需了解背景信息和技术详情,请参阅 nbgenerate-dd 中的原始设计文档。

基本用法

要为 DevSite 项目中的网页生成 Colab 笔记本,您需要 在调用 nbgenerate 命令之前,添加一个名为 _notebooks.yaml 的文件。

将 _notebooks.yaml 添加到项目中

如需根据 DevSite 项目中的网页生成 Colab 笔记本,请将名为 _notebooks.yaml 的文件添加到项目根目录(与您网站的 _project.yaml 位于同一目录中)。该文件应包含一个条目,用于表示要作为 Colab 笔记本共享的每个网页。每个条目的 source 字段都必须包含 路径转换为 Colab 笔记本。target 字段必须指定将写入生成的 Colab 笔记本的 google3 仓库路径。

例如:

- source: /earth-engine/ee-image.html
  target: //depot/google3/third_party/earthengine_community/ipynb/ee-image.ipynb
- source: /earth-engine/guides/image_objects.md
  target: //depot/google3/third_party/earthengine_community/ipynb/guides/image_objects.ipynb

此示例使用使用 Copybara 镜像到 GitHub 的目标路径,以便通过公开可用的超链接打开生成的笔记本。如需详细了解如何将 google3 路径同步到 GitHub,请参阅 copybara。另请参阅 微件示例,查看在 GitHub 中添加指向生成的笔记本的链接的示例。

生成笔记本

在首次运行 nbgenerate 之前,请在 .bashrc 中定义一个别名,并将其添加到当前 shell:

alias nbgenerate="/google/bin/releases/devsite/tools/nbgenerate/nbgenerate.par"

然后,您可以从命令行运行 nbgenerate 以重新生成所有文件 在 _notebooks.yaml 中列出:

nbgenerate googledata/devsite/content/en/PROJECT

将一个或多个路径作为 nbgenerate 的参数指定,以将处理限制为指定的文件或路径,例如:

nbgenerate third_party/devsite/developers/en/earth-engine/guides

以递归方式处理目录路径;_notebooks.yaml 中的任何文件在 或 会得到处理

如果您收到“权限遭拒”错误消息使用上面的命令运行 nbgenerate 时 别名,您也可以使用以下命令运行该工具:

blaze run //devsite/tools/nbgenerate -- googledata/devsite/content/en/PROJECT

过滤内容

如果某些内容只应显示在 DevSite 页面或 生成了 Colab 笔记本,但不能同时生成这两个笔记本,您可以使用 is_ipynb 变量,在 nbgenerate 转换期间设置为 True 过程。为防止在预演和发布到 DevSite 时出错,请将 在需要选择性添加内容的页面顶部附近:

    
{% if is_ipynb is not defined %}{% set is_ipynb=False %}{% endif %}
     

然后,您可以使用 Jinja 标记来控制哪些内容会显示在 Colab 和/或 DevSite 中。例如:

# Overview

This section will show in both the DevSite page and in the Colab notebook as
a text cell.


{% if is_ipynb %}

This content will only appear in Colab notebooks but not on DevSite pages. This
is useful for providing Colab-specific initialization and setup instructions or
code.
{% endif %}
 


{% if not is_ipynb %}
```js
// This code snippet will only be rendered in DevSite but not in Colab
// notebooks.
console.log('Hello, nbgenerate!');
```
{% endif %}
 

```py
# This snippet will appear in both DevSite and in the Colab notebook as a code
# cell.
print('Hello, nbgenerate!');
```

微件示例

网站通常会定义自己的 DevSite 微件来封装常见行为。下面列出了一些使用 is_ipynb 变量的 widget 示例,您可以根据自己的网站进行调整。

Colab 笔记本按钮微件

Earth Engine 开发者文档使用自定义 widget 在与 GitHub 中的 Colab 笔记本同步的 DevSite 页面上一致地显示在 Colab 中运行在 GitHub 上查看源代码按钮。

部分 widget 示例

“示例部分”微件 提供了如何设置标签页式版块的示例 。 该 widget 仅在 Colab 笔记本中包含 Python 代码段。它 还会删除在编写 笔记本。