Jupyter Notebook
我平时在 Obsidian 里整理学习笔记,也会把 AI 给出的 Python 示例放进 Markdown 代码块。文字和代码写在一起很方便,但想运行代码、看一张图或一份表格,就得切到另一个工具,再把结果搬回来。
所以我做了 Jupyter Notebook:在 Obsidian 中直接创建、编辑和运行 .ipynb 文件,把说明文字、代码和输出留在同一个 Notebook 里。
它使用本机 Python 和 Jupyter 内核,保存的仍是标准 nbformat 4 文件,可以继续用 Jupyter 或 VS Code 打开,不需要转换成 Markdown。
最近更新:更贴近 Obsidian 的 Notebook
截至 0.7.6,这轮更新主要补齐了原生笔记功能、编辑与导出,以及环境操作的可靠性。
- 属性和链接:Notebook 顶部支持原生 Properties;接入反链、标签搜索、图谱关系、大纲,以及标题和块定位。图谱里需要开启「附件」显示。
- 编辑和查找:支持跨单元格查找与匹配高亮,沿用 Obsidian 的查找命令和快捷键设置;Markdown 编辑时,就近预览光标所在的 LaTeX 公式。
- 图片和导出:粘贴或拖入的图片可保存在 Markdown 单元格的 attachments 中,随文件一起带走;支持离线单文件 HTML、Markdown、Python 和
.ipynb导出,也能切换到 JSON 源码视图。 - 恢复和环境管理:异常退出后可以确认恢复草稿,默认保留 7 天;设置中可调整保留时间和查看缓存目录。环境安装、取消、删除及设置刷新补充了关闭窗口和后台标签页的边界处理。
当前能做什么
- 编辑单元格:支持代码、Markdown 和 Raw 单元格,新建、删除、拖动排序、就地插入、切换类型及撤销、重做。
- 运行 Python:运行当前单元格或全部代码,同一 Notebook 共享内核变量;支持中断、重启和清理变量。
- 交互输入:遇到
input()时,在顶部工具栏下方显示输入区,并保留提示文字;密码输入隐藏内容,取消输入会中断运行。 - 查看结果:显示文字、Markdown、HTML 表格、图片和错误信息;显示单元格运行耗时,精确到 0.1 秒。
- 选择环境:识别本机 Python、Conda、虚拟环境,也可以手动指定解释器,或为本设备创建仓库专用 Python 环境。
- 管理依赖:搜索、安装、卸载与重新安装仓库环境中的依赖;编辑停顿后识别
import和from,仅在缺少必要或可选模块时提示。 - 适配 Obsidian:普通 Markdown 单元格遵循主题,支持双链跳转、标签搜索和嵌入预览;可选 Dataview 适配读取 Notebook 的 YAML 属性。
- 保存保护:保留未知元数据和原始 Notebook 字段,检测外部修改冲突,避免直接覆盖其他程序保存的内容。
依赖检查是静态检测,不执行单元格、不导入模块,也不启动内核。没有发现缺失依赖,并不等于代码已经运行成功。
安装与第一次运行
当前可从 GitHub Releases 手动安装,插件商店的上架进度以实际目录为准。
- 下载
main.js、manifest.json和styles.css。 - 在仓库的
.obsidian/plugins/下创建jupyter-notebook/,将三个文件放进去。使用自定义配置目录时替换.obsidian。 - 重载 Obsidian,在第三方插件设置中启用 Jupyter Notebook。
- 从侧栏、文件夹右键菜单或命令面板新建 Notebook,也可以打开已有
.ipynb。 - 点击顶部 Python 环境入口,选择本机环境,或安装本设备的仓库专用环境,再运行代码。
如果文件列表中看不到 .ipynb,可以开启 Obsidian 的「检测所有文件扩展名」。第一次运行外部 Notebook 时会提示确认信任;只有了解代码来源和行为后再执行。
环境为什么按设备分开
Notebook 可以通过云盘同步,但 Python 环境包含本机路径和平台相关文件,不能直接当作可跨设备运行的附件。
插件把仓库专用环境按设备区分,放在仓库配置目录下。另一台电脑打开同一份 Notebook 时,需要为那台电脑创建自己的环境。代码依赖的数据文件也必须在本机可访问;只有云端占位、尚未下载的文件不能直接拿来运行。
依赖管理只修改本设备的仓库专用环境,不会自动替你修改系统 Python。选择外部环境时,需要自行管理该环境的依赖。安装缺失模块后,可以使用代码块里的重新检查入口。
YAML 与 Dataview
在第一个 Markdown 单元格开头写 YAML,就能为 Notebook 增加属性:
hljs yaml---
title: 数据分析实验
tags:
- Python
- 数据分析
status: 进行中
---
启用 Dataview 后,可以查询这些属性。这个适配通过内存索引实现,依赖 Dataview 的内部接口;目前验证过 0.5.68,不兼容时会提示并跳过索引。
目前已接入 Obsidian 原生 Properties 面板,可直接编辑属性;属性写回时保留 YAML 注释与格式。Notebook 的 Markdown/YAML 链接也会参与反链与图谱关系,重命名时遵循 Obsidian 的链接更新设置。图谱需要开启「附件」显示。文件拿到 Jupyter 或 VS Code 后,YAML 仍然只是 Markdown 内容,不影响 Python 执行;Dataview 查询则需要回到 Obsidian 才能使用。
输出、安全与大文件
0.6.11 收紧了输出的渲染边界:HTML 和 SVG 输出过滤脚本、危险链接、活动嵌入及远程自动加载资源。运行结果中的 Markdown 使用独立静态渲染,不调用 Obsidian 插件处理器;表格、代码和安全格式仍然保留。普通 Markdown 单元格继续使用 Obsidian 原生渲染,两者用途不同。
文本输出提供复制,表格优先复制为 TSV,方便粘贴进 Excel。图片支持放大和保存,保存位置遵循 Obsidian 的附件设置;有文件名的图片尽量沿用原名,无名图片使用 Notebook、单元格和图片序号组成名称。只有输出超出折叠高度时,才显示展开和收起入口。
大 Notebook 会延迟挂载,并回收远离视口的编辑器和输出组件。重新滚回时恢复编辑状态、撤销、选择及输出展开状态;正在编辑、运行或交互的块暂不回收。Notebook 数据和撤销历史仍会占用内存,离屏回收并不意味着整份文件都不占内存。
当前边界
- 仅桌面端:当前发行版不支持手机端查看或运行。
- 实际验证以 macOS 为主:Windows、Linux、macOS 已接入跨平台 CI,覆盖桥接和相关逻辑;这不等于已在各平台完成 Obsidian 界面的完整安装实测。
- 只连接本机 Python:暂不支持远程 Jupyter 服务,也不是完整 JupyterLab 的替代品。
- 不执行任意前端输出:交互式 JavaScript 小组件、脚本和远程资源可能被过滤,静态图表更适合当前实现。
- 文件兼容不等于环境兼容:
.ipynb可以带走,运行它所需的依赖、数据和本机路径仍需另外准备。
版本历程
以下保留从最初原型到 0.7.6 的开发记录。历史条目描述当时的行为,当前支持范围以上文为准。
0.1.0
支持原生 .ipynb 编辑;本机 Python 环境选择、运行、中断、重启;以及文字、图片、表格和错误输出,直接保存 Notebook
0.1.1
美化当前功能界面,使界面看起来更加清亮
精简顶部工具栏,保留运行全部、环境选择、保存和中断图标,其余操作收进「…」菜单。
单元格减负:左侧放运行按钮和执行计数;移动、删除等操作在悬停或选中时显示
Markdown 默认渲染,双击进入编辑;阅读时呈现正常标题和段落
视觉收敛:减少灰色按钮、边框和留白,代码字号保持紧凑
错误简化:默认依据显示原因与解决入口,完整日志进行折叠
桥接依赖问题默认指向已验证过的专用虚拟环境
0.1.2
修复顶部透字问题,这是由主题额外内边距造成的
修复将 HTML 提示块标识成代码单元格
0.2.0
因为 .venv 包含本机路径及平台相关文件,更换电脑设备后需要重新创建。因此需要同步依赖清单。 环境选择:检测本机 Python、Conda、Pyenv 和项目中的 .venv,允许手动指定解释器。每仓库独立环境,默认创建在本机专用目录,与当前仓库绑定;也提供在仓库创建 .venv 的选项
云同步:同步依赖清单。换电脑后提示创建该电脑环境,避免使用另一台电脑的解释器路径
纯云端仓库:文件先下载到本机,才能本地运行;远程 Python 操作另作后续
历史能力:手机只读 Markdown、代码及已有输出,隐藏编辑和运行操作。0.6.5 起的发行版改为桌面专用。
颜色和光标: 取代原本的 CodeMirror 默认浅色配色,改用 Obsidian 的代码颜色变量;光标跟随主题文字颜色
编辑与预览: 分别使用笔形和眼睛 SVG,显示点击要切换到的模式
删除跳顶: 保留当前可见单元格位置;删除后停留在附近
拖动排序: 左侧增加拖动柄;拖动时显示整块预览和落点线;保留上下移动按钮和撤销
就地插入: 悬停在单元格之间的边界时,出现 " 加代码 " 或 " 加 Markdown";插入后直接聚焦新块
0.2.1
修复插件的模块加载问题
0.3.0
将默认流程修改为:选择已有环境,或一键创建并安装
选择已有环境时,检查本机 Python、Conda 和 Jupyter 的内核,显示 Python 版本与依赖状态;缺少依赖时明确提示,并允许安装到已有虚拟环境,系统 Python 不修改
默认情况下,在仓库创建环境,用 .obsidian/ipynb-envs/<设备标识>/ 表示。点击 " 创建并安装 " 后,自动创建虚拟环境,安装 Notebook 组件及项目依赖,成功后直接选中
多设备同步:每台设备只使用自己的环境。换设备打开时,一键创建该设备环境;同步过来的其他设备环境无法运行
窗口更加明显:用普通设置窗口展示两个选项,以及实际安装位置与进度
0.4.0
收紧间距。环境列表显示版本、依赖状态和当前使用项。
支持默认内核、i18n 中英文、仓库环境安装与确认卸载。
增加输出折叠、图片懒加载、清空输出和可选大小限制。
完善双链跳转、标签搜索和嵌入预览
0.4.1
修复 Python 构建问题
0.5.0
环境列表以新布局重构:右侧为单选标识和启动项;新环境可独立下载 Python,支持进度、取消、确认删除与重装
依赖窗口支持搜索安装、已安装管理和受保护依赖检查。缺库时提供快捷入口,并区分仓库环境与外部环境
0.5.1
依赖安装:现在存在进度条、阶段说明与日志;关闭窗口会取消安装,而不是后台下载;已完成的部分保留
0.5.2
操作结束后,隐藏 " 取消安装 " 按钮;搜索结果实际显示已安装版本,并提供 " 删除 " 和 " 重新安装 " 按钮。已安装页只搜索本机仓库中的依赖,不再跳回 PyPI
0.5.3
可通过左侧 Notebook 图标、文件夹或文件右键菜单、命令面板,新建 Jupyter Notebook 入口,或新建 .ipynb 文件
0.5.4
使用 Electron 网络接口替代浏览器 Fetch 下载 GitHub 安装工具
0.6.0
适配 Notebook 开头的 YAML 属性,并通过 Dataview 查询。编辑时的 import 依赖检测在 0.6.4 实现。
0.6.1
长块编辑时,右上角工具条随滚动保持在顶部导航栏下方,滚过该块后停止跟随 正在编辑的 Markdown 和代码块显示主题强调色边框;操作工具条时仍保留边框
0.6.2
预览提示移到块右下角,悬停或聚焦时显示,不再弹出浮动提示框
Markdown 和代码编辑支持当前行行号匹配括号高亮;光标所在变量名会高亮当前块的同名词,颜色遵循主题
0.6.3
表格使用主题边框; Markdown 代码块和行内代码使用主题底色; 标题、段落间距等交由 Obsidian 原生 Markdown 样式处理
0.6.4
- 编辑停顿约 900ms 后识别
import/from,检查当前 Python 环境。 - 缺库在对应代码块内提示,提供安装入口和重新检查按钮。
- 切换环境、关闭依赖管理窗口后自动重新检测。
- 检测不会执行用户代码、导入模块或启动内核;手机端不检测。
0.6.5
- 设置页支持新版设置搜索,同时兼容旧版。
- 默认 README 改为完整英文,中文版单独保留。
- 补齐中英文错误提示,语言切换同步刷新命令和侧栏。
0.6.6
修正上架商店相关内容;为 HTML 代码块添加单独的主题色突出
- README 使用标准 Markdown 一级标题 Jupyter Notebook,与 manifest.json 名称一致。
- Markdown 预览的 HTML div/alert 提示块增加独立背景和边框,成功、信息、警告、错误颜色遵循当前主题,并适配浅色和深色背景。
- 保留原始 Notebook 内容;桌面专用,最低 Obsidian 版本为 1.8.7。
- Release 仅提供 main.js、manifest.json、styles.css 三个标准文件,附 GitHub 构建来源证明。ZIP 及 SHA256SUMS 保存在仓库 release-archives/v0.6.6/。
0.6.7
- 修复 Win/Linux 路径与内核退出问题。
- 增加首次运行信任确认。
- 增加环境检查、修复、诊断复制及故障分类。
- 区分静态检测与实际执行成功,隐藏正常依赖提示。
- 显示内核忙碌、停止状态,提供变量清理入口。
0.6.8
- 补充 input 输入框;密码输入隐藏内容;取消后会中断运行
- 块的左侧增加灰色悬停条、主题强调色选中条
- 修复 Markdown 的表格输出与长图片裁切问题
- 调整图片加载与滚动定位,修复抽搐滚动问题
- 代码块显示运行耗时,精确到 0.1s
- 修改内核运行的状态提示文字
0.6.9
构建失败,版本跳过
0.6.10
- 统一版本更新、提交预检、完整发行包生成。
- 增加大文件滚动、编辑、撤销及资源释放回归验证。
- 增加「代码已修改」「等待输入」及连续输入序号。
- 完善安装重试、残留恢复和诊断脱敏。
- 增加图片放大与保存、表格横向滚动和单项输出操作;后续在 0.6.11 简化为文本/表格仅复制、图片可保存。
0.6.11
- 输出安全:过滤脚本、危险链接和远程自动加载资源;Markdown 输出改用静态渲染,保留表格、代码和安全格式。
- 大文件内存:回收离屏单元格的编辑器及输出组件,保留编辑、撤销、选择和滚动状态。
- 精简依赖提示,统一输出操作位置;仅在输出超出高度时显示展开与收起入口。
- 表格复制为 TSV;同一单元格的多张无名输出图片增加序号。
0.7.0
- 增加异常退出草稿恢复与过期清理配置。
- 保留其他单元格的编辑器和撤销状态,增量检查修改过的代码块。
- 实现原生 Properties,完善 Dataview 属性,以及反链、标签搜索、图谱和标题/块定位。
0.7.1
- 移动达到 5px 才开始拖动,预览保持原抓取点,减少误触和位置跳动。
- 重命名时沿用 Obsidian 的链接更新设置,保留 Markdown/YAML 链接的别名与定位后缀。
0.7.2
- 支持将图片嵌入 Notebook。
- 完善 LaTeX 公式渲染。
- 保留 YAML 注释与格式。
- 适配 Markdown 标题层级。
- 增加多种导出格式。
- 支持切换到 JSON 视图。
0.7.3
- 插件更新后显示本版本更新摘要。
- 大文件导出显示进度并支持取消。
- 统一环境操作日志,合并环境检查与修复入口。
- 已安装依赖分组显示并支持跳转到关联依赖。
- 发布前校验版本、双语说明与发行文件。
- 提升环境创建并发测试及更新摘要的稳定性。
0.7.4
- Markdown 编辑时就近预览光标所在的 LaTeX 公式,移到普通文字时自动隐藏。
- 修复公式引擎加载与预览容器创建问题。
- 修复原生 Properties 面板的中英文适配。
- 增加 Windows、Linux、macOS 跨平台检查及原生接口兼容性回归测试。
0.7.5
- 支持 Notebook 跨单元格查找与匹配高亮,接入 Obsidian 原生查找命令与快捷键设置。
- 稳定代码运行期间的状态提示,增加默认开启的主题代码背景设置并修复圆角边框显示。
- 统一 JSON 视图与 Notebook 的代码字号。
- 优化弹窗关闭按钮、边框与滚动布局。
- 修复环境下载时的 AbortSignal 类型错误,保留下载取消与超时处理。
- 优化安装失败和取消后的状态恢复与重试,补充 Windows 终止安装进程的兜底。
0.7.6
- 修复后台延迟加载的 Notebook 标签页导致环境安装、删除和设置刷新报错的问题。
- 环境窗口在确认或准备操作时关闭后,停止尚未开始的安装、修复与删除,并释放操作锁。
- 修复窗口关闭后仍可能选择环境或打开依赖管理界面的问题。
项目链接
本文根据项目开发记录与截至 0.7.6 的实现整理,更新于 2026-11-01,作者:Tiyukains。