作者: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-Wasm和ImJoy上,这是一个混合计算平台,该平台通过对称透明的远程过程调用进行通信。 IMJOY和ITKWIDGETS支持基于浏览器的Pyodide通信以及许多其他服务器客户通信传输机制。
在本教程中,我们将首先演示一个零服务器,交互式3D渲染笔记本。然后,我们浏览可以根据您的需求进行自定义的快速简便配置。让我们开始吧! ð
0.预临时性
复制下图,腹主动脉支架的医学成像体积的渲染,running the notebook in your web browser!加载页面后,使用标准Shift+Enter
键执行Jupyter Notebook单元格。
请注意,与其他Jupyter部署不同,Python代码在您的系统上运行而不是服务器。
1.创建jupyterlite环境
要构建我们的可持续jupyterlite部署,我们将使用包含python包装的a Python environment:
jupyterlite
imjoy_jupyterlab_extension
- 您想要在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 Pages,Netlify或Fleek)部署并共享该网站。
下一步是什么
在这篇文章中,我们学会了如何创建可扩展,可持续的,零服务器的jupyter部署,该部署使用itkwidgets进行3D渲染。在随后的帖子中,我们将讨论如何创建用PyScript用Python编写的简单,零服务器的自定义Web应用程序。
享受itk!