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

本贴最后更新于 883 天前,其中的信息可能已经时移世改

简介

主题 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. 打开全局设置窗口

  3. 输入服务器 URL 并点击 确定

    • http(s)://hostname(:port)
  4. (可选, Cookie 认证方案) 点击 测试 链接跳转到登录页面并登录

  5. (可选, Cookie 认证方案) Ctrl + Shift + I 打开开发者工具, 获得 Cookies

    • 方案 1: 在控制台输入 document.cookie 并从输出结果复制 _xsrf 字段
    • 方案 2: 选择一个网络链接并从 HTTP 请求头的 Cookies 字段复制 _xsrf 字段
    • _xsrf 字段完整格式为 _xsrf=d|xxxxxxxx|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|dddddddddd
    • d: 一个十进制数字
    • x: 一个十六进制数字
  6. 关闭 Jupyter 窗口并重新打开全局设置窗口

  7. 输入 CookiesToken 并点击 确定

    • Cookies 认证方案仅适用于 Jupyter 服务与思源服务 URL host 相同的情况

    • 示例:

      • 思源服务 URL: http://127.0.0.1:6806
      • Jupyter 服务 URL: http://127.0.0.1:8888
  8. 关闭全局设置窗口

  9. 单击 重新加载窗口 按钮或 Ctrl + F5 刷新页面

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 文件 复制 到所使用的其他主题的目录下
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    23004 引用 • 92519 回帖
3 操作
shuoying 在 2022-07-22 22:12:34 更新了该帖
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 更新了该回帖
  • 虽热目前看还是设置比较繁琐,但这个功能真的太屌了!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

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

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

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

    1 操作
    yulingyou 在 2022-06-19 17:48:31 更新了该回帖
    保存后使用右上角重新加载窗口按钮后再打开全局设置试试, 可能读取了缓存
    shuoying
    请问解决了吗?我也遇到这个问题
    DrMango
  • xiyao 3 评论

    我的文档块菜单里没有 Jupyter 选项,怎么办?

    打开 块菜单增强 功能了嘛 ❓
    shuoying
    @shuoying 哦,现在打开了,出现选项了。配置好了以后还是有问题: Blocking Cross Origin WebSocket Attempt. Origin: http://127.0.0.1:6806, Host: 127.0.0.1:8889
    xiyao
    @xiyao 设置 allow_origin 或 allow_origin_pat 字段了没
    shuoying
  • 现在支持使用 token 进行认证了, 这个问题可能是 cookies 在 host 不同时的跨域问题~

    1 回复
  • xiyao

    谢谢 ,现在成功了。

  • 全局设置里可以打开 jupyterlab,但文档设置里不行,进去后不能新建会话,然后 jupyterlab 报这个

    image.png

    全局设置里面 Server 应该设置为 http(s)://host:port 你这里看起来是设置为了 http(s)://host:port/lab
    shuoying 1
    的确是的,port 端口后也不能带/,不然也会报错:(
    Ultramarine
  • weiyuxin 3 评论

    大佬,请问全局设置可以验证成功。但是文档设置显示认证失败怎么解决

    使用 token 认证方法试试
    shuoying
    @shuoying 还是不行,notebook 显示 404 GET //api/sessions
    weiyuxin
    @weiyuxin 删除全局设置中的 Server 末尾的 /
    shuoying
  • kobi 2 评论

    萌佬你好~

    1. 我发现会话目录设为 aa\bb,获取文件时 ./ 仍然是服务目录,而不是 aaaa\bb

    image.png

    1. 会话目录 与服务启动目录可否不是继承关系呢?比如我在 D:\ 下启动 jupyter,会话目录设为 E:\ 呢?比如会话目录设为,E:\
    1. 试试在 jupyter web 页面新建一个会话/笔记, 然后在这里的管理会话下拉列表直接选择已存在的会话
    shuoying 1
    2. 我没试过, 不过应该不太行, 毕竟有访问控制
    shuoying
  • yuanzhi 1 评论

    大佬,现在思源笔记现在文档块菜单里没有 jupyter 这个选项怎么办image.png

    需要启用主题所带悬浮菜单的 块菜单增强 功能
    shuoying
  • tinaliasd 1 评论

    能否每次不用新建会话

    1 操作
    tinaliasd 在 2023-03-28 09:02:55 更新了该回帖
    可以选择已经存在的会话
    shuoying
请输入回帖内容 ...