[思源笔记经验分享] Jupyter 模式

简介

主题 Dark+v1.1.0 大版本更新中来了一个大功能: 在思源中以 Jupyter 的形式执行代码

如果喜欢该功能, 欢迎为 Dark+ 点亮一个 ⭐ (*^▽^*)

使用教程

1. 添加 Jupyter 服务对思源的信任

  1. 打开配置文件 jupyter_lab_config.pyjupyter_notebook_config.py

    • 使用命令 jupyter lab --generate-configjupyter notebook --generate-config 生成配置文件
    • Windows 系统生成的配置文件一般在 C:\Users\<用户名>\.jupyter 目录下
  2. 找到 c.ServerApp.allow_originc.NotebookApp.allow_origin 字段

    • 该字段用于设置被信赖的请求源
    • 也可以通过 c.ServerApp.allow_origin_patc.NotebookApp.allow_origin_pat 字段使用正则表达式进行设置可信源
  3. 将该字段设置为思源 'location.origin''*'

    • Ctrl + Shift + I 打开思源的开发者工具, 在控制台中输入 location.origin 后回车即可获得思源的源地址, 桌面端一般为 http://127.0.0.1:6806
    • 设置为 '*' 将信任所有请求源
    • 示例: c.ServerApp.allow_origin = 'http://127.0.0.1:6806'
  4. 保存文件并启动 jupyter 服务

2. 登录 Jupyter 服务

思源笔记功能示范 28.gif

  1. 单击文档块菜单 > Jupyter > 全局设置菜单项打开全局设置窗口

  2. Server 项的输入框中输入服务地址并点击 确定

    • Jupyter 服务地址示例: http(s)://hostname(:port)
  3. 点击 测试 链接跳转到 Jupyter 登录页面并登录

  4. Ctrl + Shift + I 打开开发者工具, 通过如下方案获得 Cookies

    • 方案 1: 在控制台输入 document.cookie 并从输出结果复制 _xsrf 字段

    • 方案 2: 选择一个网络链接并从请求头的 Cookies 字段复制 _xsrf 字段

    • _xsrf 字段完整格式为 _xsrf=d|xxxxxxxx|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|dddddddddd

      • d: 一个十进制数字
      • x: 一个十六进制数字
      • 示例: _xsrf=2|e211bef3|880f0de598aac2be7650bcd0df4e179d|1653753706
  5. 关闭 Jupyter 窗口并重新打开全局设置窗口

  6. Coolies 项的输入框中输入 _xsrf 键值对并点击 确定

  7. 关闭全局设置窗口

  8. 单击 重新加载窗口 按钮或 Ctrl + F5location.reload() 刷新页面

3. 建立会话

思源笔记功能示范 29.gif

  1. 单击 文档块菜单 > Jupyter > 文档设置 菜单项打开文档设置窗口

  2. 选择想要启动的内核, 输入 会话名称会话目录, 单击 新建 按钮启动该内核并建立会话

    • 会话名称 是在 Jupyter 中查看活动内核时显示的名称

    • 会话目录 所指定的目录是使用相对路径读写文件时的基点

      • 示例: 假设 Jupyter 服务设置的根目录为 D:\foo\, 这里会话目录设置为 bar\测试, 那么使用该内核访问相对路径 ./ 实际访问的是 D:\foo\bar\ 目录
  3. 单击中断重启按钮, 若没有弹窗则表示成功与服务器建立连接

    • 中断按钮会中断正在运行(忙碌)的内核所执行的任务
    • 重启按钮会重启内核, 内核之前运行时产生的所有变量与数据均会丢失
  4. 单击连接按钮

    • 该按钮会将会话与内核信息写入文档块的块属性中
    • 在该文档中想要执行代码时可以使用这些信息建立与内核的连接
  5. F5 刷新文档, 若文档右上角内核状态显示 启动中空闲 则表示连接内核成功

4. 运行代码

思源笔记功能示范 30.gif

  • 单击代码块菜单 > Jupyter > 运行代码菜单项

    • 单击该项后会以文档关联的内核执行代码块中的代码
    • 之后将代码的执行结果插入到该代码下的超级块中(如果没有则新建)
    • 输出结果中的内容会以 Markdown 源码的形式进行解析
  • 代码块菜单 > Jupyter > 运行代码 (转义输出结果)

    • 输出结果中的所有半角符号都使用 \ 进行转义, 从而避免其在插入时解析为 Markdown

5. 关闭连接

  • 单击文档块菜单 > Jupyter > 关闭连接菜单项

    • 该操作不会关闭内核与会话, 而是关闭与其的连接

      • 不会清空内核执行代码时产生的变量与数据
      • 下一次运行代码时会重新建立一个 WebSocket 连接
    • 该操作会重置运行序号

6. 关闭内核

思源笔记功能示范 31.gif

  1. 单击文档块菜单 > Jupyter > 文档设置打开文档设置窗口
  2. 单击 关闭 按钮以关闭会话与内核
  3. F5 刷新文档, 若文档右上角内核状态显示 No Kernel 则表示内核关闭成功

注意事项

  1. 目前尚未对 input() 输入函数进行适配

  2. 目前尚未对除 文本图片错误输出 以外的返回消息进行适配, 如果需要解析其他消息, 请到 Issues 反馈

    • 反馈时请附代码与样式截图
    • 暂未有对存在鼠标交互操作的 ipywidgets 支持计划
  3. 目前尚不支持对 *.ipynb 文件的导入与导出

  4. 部分魔术指令可能不支持

使用

  • 若不使用 Dark+ 主题, 可以下载该主题 v1.1.0+ 版本, 将 Dark+ 主题目录下的 theme.js 文件 复制 到所使用的其他主题的目录下
2 操作
shuoying 在 2022-06-04 12:04:54 更新了该帖
shuoying 在 2022-06-04 02:18:44 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • abc1206
    订阅者

    赞美大佬 👍

    建议大佬不熬夜,爱护身体更好地促进人类发展 🎉

    2 操作
    abc1206 在 2022-06-04 07:44:38 更新了该回帖
    abc1206 在 2022-06-04 07:44:06 更新了该回帖
  • DataWealth
    订阅者

    虽热目前看还是设置比较繁琐,但这个功能真的太屌了!notebook 虽热很好,但是插入图片不便,复杂点的文字笔记不可行,要是能思源能方便地支持那真的是实现了完美的可 replication 的报告或分析了(虽热感觉是奢望)

  • jidenanian
    订阅者

    虽然看不懂,但是看见大佬直接点赞 👍

  • yulingyou 1 评论

    image.png

    image.png

    大佬,按着你的方法获取了 cookie,但是还是认证失败是怎么回事呀,防火墙关了也是一样的

    jupyter 的版本

    IPython : 8.4.0
    ipykernel : 6.15.0
    ipywidgets : 7.7.0
    jupyter_client : 7.3.4
    jupyter_core : 4.10.0
    jupyter_server : not installed
    jupyterlab : not installed
    nbclient : 0.6.4
    nbconvert : 6.5.0
    nbformat : 5.4.0
    notebook : 6.4.12
    qtconsole : 5.3.1
    traitlets : 5.2.2

    打开开发者工具瞅瞅是哪一个请求出现了问题
    shuoying
  • yulingyou 1 评论

    我每次打开全局设置时都会要求我重新输入一遍 sever 和 cookie,是这两个数据没有记录存储吗?不像你图示那样再次打开会对设置的数据进行保留,请问这个还有什么其他操作吗?

    我已经做过 ctrl+f5 重新加载数据,但还是没办法读取出之前保存的数据...

    1 操作
    yulingyou 在 2022-06-19 17:48:31 更新了该回帖
    保存后使用右上角重新加载窗口按钮后再打开全局设置试试, 可能读取了缓存
    shuoying