Jupyter.net 是一个基于 Jupyter 框架的 Windows 独立应用程序,它使用 C# 编写,用于进行交互式计算。可以认为它是 Jupyter Notebooks 的简化版本。Jupyter 框架主要由以下几部分组成:
通信协议:它负责将内核(负责运行程序代码)与前端(允许用户输入代码、查看结果、将代码保存到文件等)进行通信。
笔记本文件格式:用于将代码、执行结果、附加注释和元数据存储在文件中。这种格式的丰富结构甚至允许存储图像、声音以及潜在的任何类型的信息。
Python 内核:Jupyter 框架的一个核心组件。
Jupyter Notebook:Jupyter 的开源、通用的 Web 前端,可以认为是“官方”的 Jupyter GUI。
JupyterLab:Jupyter Notebook 的更新和增强版本。
Jupyter 控制台:Jupyter 的简单命令行前端。
还有其他第三方 Jupyter 前端,例如:
Nteract:一个桌面通用应用程序,用于创建、编辑和执行 Jupyter 笔记本。
CoCalc:一个基于 Web 的 Jupyter 前端,专门用于数据科学。
Spyder:一个基于 Jupyter 的数据科学桌面应用程序。
Jupyter 架构非常通用,结合正确的内核和前端,它可以用于许多不同的事物。Spyder 是如何使用这种架构创建一个强大的数据分析工具的一个很好的例子。
对于任何编程语言都有可用的内核(),并且通常可用的前端足够在各种上下文中使用。然而,Jupyter.net 可以用作创建更特定 GUI 的基础。
最后,Jupyter.net 基于这里描述的库:
jupyter.net Client:一个用于与 Jupyter 内核交互的 C# 库。虽然不是必需的,但建议阅读这篇文章。
要使用 Jupyter.net,最好具备 Python 的基本知识。要理解代码,需要了解 C# 和 WPF 的离散知识。
该应用程序假定 Python 和 Jupyter 框架已正确安装在计算机上。
可以从下载 Python 安装程序。在安装过程中,选择“将 Python 3.X 添加到 PATH”选项。
Python 安装完成后,可以通过在命令提示符上执行以下命令来安装 Jupyter 框架:
python -m pip install jupyter
要测试 Jupyter 安装,可以运行命令:
jupyter console
。命令行 Jupyter 解释器应该会打开,并连接到 Python 内核,让执行 Python 代码。
Python 和 Jupyter 正确安装后,只需下载 JupyterNet.zip 文件,解压缩并运行 JupiterNet.exe。
应用程序启动后,它会寻找 Python 内核并运行它。
如果应用程序未能找到 Jupyter 框架,它会询问 python.exe 的位置。如果安装了多个 Jupyter 内核,应用程序会要求选择一个。
初始化完成后,将看到下面的屏幕:
状态栏上的文本“Python 3 | Idle”确认已成功启动 Python 内核。
然后,可以在代码栏中输入任何代码,并通过按 Enter 执行它。如果按 Alt+Enter,代码被解释为注释并插入到笔记本中,但不会被执行。
如果需要输入超过一行的代码,可以按 Multine mode 按钮或按 F3。
在输入代码时,可以按 Ctrl+Space 显示建议菜单以完成当前语句。
如果要中断当前计算,按 Interrupt 按钮。
要修改现有单元格,双击它,或选择它并按 Edit。
应用程序架构遵循 Model-View-ViewModel (MVVM) 模式。
应用程序的主要类是:
NotebookEditorVM:它是应用程序的主要视图模型。它包含当前笔记本、用户可用的命令和附加状态信息。
Mainwindow.xaml:它是应用程序的视图,用 XAML 编写并与视图模型 NotebookEditorVM 通过数据绑定链接。
JupyterClient 是包含与内核通信方法的类。在这篇文章中描述: jupyter.net Client:一个用于与 Jupyter 内核交互的 C# 库。
NotebookVM:它是打开笔记本的视图模型。目前,一次只能打开一个笔记本。
NotebookVM 将 Notebook 类中包含的数据转换为可在 ListBox 对象中可视化的数据。请注意,Notebook 是一个层次结构对象,因为每个输入节点可以包含许多输出节点作为子节点。这种结构被 NotebookVM “展平”为一个简单的节点列表,这些节点是以下 CellVM 子类的实例:
InputcellVM
TextCellVM
ImageCellVM
NotebookVM 和 CellVM 类还跟踪单元格执行状态。每个单元格可以处于以下状态之一:
NotStarted
Running
Completed
Error