选自JupyterBlog
作者:yuvipanda
机器之心编译
参与:一鸣、思源
Jupyter生态系统非常完善与强大,基本上没有它做不到的,只有你想不到的。在这篇文章中,作者介绍了能扩展Jupyter功能的各种方向,也许下一次需要时,就能真正「想到」这类扩展操作。
当有人说:「你可以用Jupyter扩展解决这个问题」,他们可能没有说清楚是什么样的扩展。Jupyter生态系统是非常模块化且具有扩展性的,所以有很多种扩展方式。这个博客希望能总结最常用的Jupyter扩展,并帮助你发掘生态系统中的新功能。
JupyterLab扩展
在JupyterLab中用jupyterlab-drawio扩展绘图
JupyterLab是广受欢迎的JupyterNotebook「新」界面。它是一个交互式的开发环境,可用于笔记本、代码或数据,因此它的扩展性非常强。使用相关的扩展,可以添加一整套新功能,或者完全改变界面的运行方式。这些扩展是基于TypeScript火JavaScript写的,它们在浏览器里运行。
经典的JupyterNotebook扩展
JupyterNotebook中的内容列表扩展
人们总是会想到经典的Jupyter笔记本界面,但实际上,你可扩展它的各个模块。这些JavaScript客户端可以让你按照自己的想法添加或改变功能,它们和JupyterLab扩展是一样的。
笔记本服务器扩展(serverextention)
和前两种扩展不同,Jupyter笔记本的服务器扩展使用Python语言编写,并加入了很多服务端的功能,以下有两个主要的例子。
在JupyterLab中预览LaTeX内容
预览LaTeX
第一个是一个为JupyterLab或经典的Jupyter笔记本提供的后端扩展——jupyterlab-latex。它可以在JupyterLab中预览LaTeX文件。它有一个和JupyterLab文本编辑器集成的扩展,以及一个后端服务器扩展,可以运行LaTeX命令,并在前端显示效果。
集成网络应用
第二个则是为提供服务端处理提供用户界面的扩展。因为服务网扩展可以作为任意TornadoHTTPhandler,因此任何你想得到的网络应用都可以写成一个Jupyter服务扩展。这里的例子是npgipuller,提供了用户界面,可以将git代码仓库发布给用户。
Jupyter内核
你可能已经很熟悉在Jupyter笔记本中使用Python语言了,其实你可以在其中运行很多语言:R、Julia、JavaScript、Octave、Scala/Spark、C++、bash,甚至是Matlab。这些都被称作内核。你可以为自己常用的编程语言写一个内核,将Jupyter协议直接用在上面,用metakernel项目打包,或者用Xeus打包成C++依赖。内核制作好以后,它可以在任何一个Jupyter前端运行,包括经典笔记本、JupyterLab、nteract、Jupyter命令行等。
IPythonMagics
如果你在笔记本里写过如%matplotlibinline这样的命令,那么你已经尝试过IPython功能了。这些命令就像是Python中的宏(macro)——你可以写定制化的代码,将剩余的代码块独立出来,然后做自己想做的事情。
这种魔术函数从%开始,然后通过%后面的代码发挥功能。例如%cdsomedirectory可以切换Python运行中的文件目录。代码块功能从%%开始,并运行后面的整个块。%%timeit应该是最著名的,它可以提供运行代码块的时间。
你也可以构建自己的魔术函数。例如,ipython-sql(