嵌入交互式ITKWIDGETS 3D渲染片到Jupyterlite部署
#网络开发人员 #教程 #python #jupyter
作者:Matt McCormick,Brianna Major,Jeremy Tuloup,Wei Ouyang,Stephen Aylward

零安装 Web应用程序已经改变了我们消耗和交付软件的方式。基于浏览器的界面有助于快速发现,探索和通用访问。

但是,对于研究软件工程师(RSE)而言,为Web应用程序开发传统的软件堆栈不仅繁重,而且这些堆栈可能会限制将来的基本可扩展性,并且可能更加繁重。 RSE必须面对困难的问题:

  • 谁将付费以保持服务器在线?
  • 谁将为许多用户或数据集的服务器付费?
  • 您何时会找到学习的时间,并与所有所需的DevOps知识和技能保持最新状态?
  • 谁将维护系统并解决其出现的安全漏洞?
  • 服务器上的私人数据如何管理并保持安全?

正如我最喜欢的教授之一所说的那样,在这种情况下,我们可以研究明智的医生提供的建议:

病人:哦,医生,当我这样的膝盖移动时会严重疼痛。

医生:停止那样移动膝盖!

在某些情况下,需要传统的Web应用程序软件堆栈的组件,其中一些组件比其他组件更容易,更可扩展和更可持续。但是,对于许多RSE用例,我们现在可以创建有用的Web应用程序,同时完全避免使用与服务器相关的传统困难。

在本教程中,我们将演示如何创建零服务器 jupyterlite部署,将交互式3D渲染嵌入到先进的科学应用中,例如使用MONAI进行深度学习医学图像分析应用。

JupyterLite是一种JupyterLab分布,完全在使用Jupyterlab组件和扩展名的地面构建的浏览器中运行。 Jupyterlite使用基于WebAssembly的科学python分布,称为Pyodide

ITKWidgets提供了交互式小部件,可在网络上可视化图像,点集和3D几何形状。 Itkwidgets由相同的WebAssembly技术提供动力。它建立在ITK-WasmImJoy上,这是一个混合计算平台,该平台通过对称透明的远程过程调用进行通信。 IMJOY和ITKWIDGETS支持基于浏览器的Pyodide通信以及许多其他服务器客户通信传输机制。

在本教程中,我们将首先演示一个零服务器,交互式3D渲染笔记本。然后,我们浏览可以根据您的需求进行自定义的快速简便配置。让我们开始吧! ð

0.预临时性

复制下图,腹主动脉支架的医学成像体积的渲染,running the notebook in your web browser!加载页面后,使用标准Shift+Enter键执行Jupyter Notebook单元格。

a medical imaging volume of an abdominal aortic stent rendered in JupyterLite

请注意,与其他Jupyter部署不同,Python代码在您的系统上运行而不是服务器。

1.创建jupyterlite环境

要构建我们的可持续jupyterlite部署,我们将使用包含python包装的a Python environment

  1. jupyterlite
  2. imjoy_jupyterlab_extension
  3. 您想要在Jupyterlab部署中想要的任何其他Jupyterlab联合扩展名(Jupyterlab 3扩展)。

用:
创建 sumplion.txt 文件

jupyterlite[all]==0.1.0b17
imjoy_jupyterlab_extension

并安装软件包:

python -m pip install -r ./requirements.txt

另请参见相关的JupyterLite extension addition documentation

2.添加itkwidgets和其他Python软件包

接下来,我们将添加 itkwidgets ,其依赖项和其他Python软件包及其依赖项,我们希望将其包括在Jupyterlite配置中以进行部署。这些软件包以及the packages available in the Pyodide distribution将在部署的网站中提供。

创建 jupyterlite_config.json 文件,该文件指定了itkwidgets wheel python软件包的位置。添加其他所需的软件包及其依赖项如下。

{
    "PipliteAddon": {
        "piplite_urls": [
            "https://files.pythonhosted.org/packages/4c/ee/56f970ca26375176d3e4885f58471a12d5a6794bcefe8ad0ccb8d7158ca3/itkwasm-1.0b82-py3-none-any.whl",
            "https://files.pythonhosted.org/packages/6c/55/c3fc7e2b9671d15f0c0becdcb9fad6c330172988744ad6eaa17b71bace88/imjoy_rpc-0.5.16-py3-none-any.whl",
            "https://files.pythonhosted.org/packages/69/d9/5a6c8af2f4b4f49a809ae316ae4c12937d7dfda4e5b2f9e4167df5f15c0e/imjoy_utils-0.1.2-py3-none-any.whl",
            "https://files.pythonhosted.org/packages/c9/dc/3504845528418aff0b71f4b622bb0e8e12adec2d8f2c1ba21d695b9ac6e6/itkwidgets-1.0a24-py3-none-any.whl",
            "https://files.pythonhosted.org/packages/bb/3e/3667ac685ae83887b874896bcb55584797ba6b52a292df3e4b37736a9610/ngff_zarr-0.1.6-py3-none-any.whl"
        ]
    }
}

您可以通过在PyPI上浏览软件包并从下载文件页面复制链接来找到指向这些URL的链接。

对于不在PYPI上没有轮子的软件包,您可以通过将其放置在Jupyterlite配置的 pypi/目录中来提供本地提供。例如,如果您想使用itkwidgets的本地版本而不是PYPI上的版本,则可以将this koude3 wheel直接添加到您的 pypi/目录中。

$ ls pypi/
pypi/dask_image-2022.9.0-py2.py3-none-any.whl

3.添加笔记本和数据

添加您希望在 files/目录中的部署中可用的笔记本和数据。在本教程中,我们将添加一个Hello3DWorld.ipynb notebook

$ ls files/
files/Hello3DWorld.ipynb

在笔记本中,在第一个单元格中安装其他软件包。

import piplite
await piplite.install(["itkwidgets==1.0a24"])

4.建造和部署

使用命令构建您的网站:

jupyter lite build

使用python -m http.server --directory ./_output或:
在本地提供网站

jupyter lite serve

可以与免费的静态文件托管服务(例如GitHub PagesNetlifyFleek)部署并共享该网站。

下一步是什么

在这篇文章中,我们学会了如何创建可扩展,可持续的,零服务器的jupyter部署,该部署使用itkwidgets进行3D渲染。在随后的帖子中,我们将讨论如何创建用PyScript用Python编写的简单,零服务器的自定义Web应用程序。

享受itk!