数据科学

Kotlin Kernel为Jupyter Notebook,V0.9.0

此更新Jupyter Notebook的Kotlin内核主要针对库作者,使他们能够轻松地将Kotlin库与Jupyter Notebabls集成。它还包括将Kotlin编译器升级到1.5.0版本,以及错误修复和性能改进。

PIP安装公共汽车安装

添加库集成的旧方法

如您所知,它已经可以通过创建JSON文件来集成库,我们调用库描述符。在内核存储库中,我们有许多预定义描述符。您可以找到它们的完整列表这里

创建库描述符相当容易。只需创建JSON文件并提供“描述图书馆描述和一个部分关联与图书馆网页链接的部分。然后添加存储库依赖性部分,描述用于依赖性解析的存储库以及库包括该库所包含的工件。你也可以添加一个进口部分,其中列出将在装入描述符时自动添加到笔记本的导入,例如在里面initcell.代码片段,渲染器,等等。完成后,保存创建的文件并以任何方式从内核引用它最方便为你。在此版本中,我们已添加更多方法来加载描述符。您可以了解更多有关如何创建库描述符的信息这里

当您不是您要集成的库的作者时,仍然支持该用于集成库的方法。但它确实有一些限制:

  1. 它需要额外的版本同步。如果释放了一个新版本的库和集成中使用的类,则会断开集成。
  2. 在json中写kotlin代码并不容易没有任何IDE支持。因此,如果您的图书馆提供渲染器或初始化代码,那么您必须通过一个可能的潜在的暂停和错误过程。
  3. 不支持传递依赖项。如果库A和B提供描述符和库a取决于库b,那么添加库a的描述符是不够的,并且您也需要运行%使用B.
  4. 不允许高级集成技术。请参阅下面以获取更多信息。

添加库集成的新方法

关于Kotlin笔记本电脑的最佳事物之一(与Python笔记本相比)是您不必考虑依赖项。您只需加载您需要的库@取决于注释并使用它。所有传递依赖项都是自动加载的,并且您不必担心环境或依赖版本冲突。一个额外的奖金是它在所有计算机上都有相同的方式。然而,到目前为止,还没有一种方法来定义上面提到的描述符并将其附加到库,因此您不必单独创建和加载它。

现在有这样的方式。您现在可以定义库中的描述符,并使用Gradle插件自动查找和加载ID。这意味着您不必写一个单独的json和%用指示。

如果您是库的维护者并且可以更改其代码,您可能喜欢新的集成方法。它目前利用Gradle作为构建系统,但如果您使用别的东西,请随意打开一个问题我们将致力于为其添加支持。

假设您拥有在Kotlin DSL中编写的以下Gradle Build脚本:

然后,您的图书馆的已发布的工件应具有以下坐标:org.example:图书馆:1.0

您通常使用您的图书馆添加到笔记本取决于文件注释:

现在假设您需要在笔记本电脑中添加此库的默认导入和渲染器。首先,你申请Gradle Plugin.到你的构建:

然后,你写一个整合类并用它标记jupyterlibrary.注解:

它应该这样我的课是来自您图书馆的课程,并拥有tohtml()方法,返回表示为字符串的HTML片段。

重新发布库后,重新启动内核并通过导入库取决于再次。现在,您可以使用所有包org.example.如果没有指定其他限定符,则可以在返回的单元格中看到呈现的HTML我的课实例!

高级集成功能

让我们来看看一些先进的技术,你可以用来改善整合。我们将使用以下类集以供参考:

子类型感知渲染器

在使用旧样式的描述符中,您可以定义转换特定类型的单元格结果的渲染器。这种方法的主要问题是匹配类型匹配是通过完全限定的类型名称完成的。因此,如果您为类型定义渲染器一种有一个亚型B.,渲染器不会被触发为类型的实例B.

新API为您提供两个解决问题的解决方案。首先,您可以实现org.jetbrains.kotlinx.jupyter.api.Renseable.界面:

它产生以下结果:

回报了myclass.

另一种做同样的方法实际上已经上面已经呈现:

如果要将Integration Logic远离主代码,则优选此选项是优选的。

可变转换器

可变转换器允许您为特定类型的变量添加回调:

此转换器创建一个名称的新变量person.name.对于每一个人在单元格中定义的变量。这是它的工作原理:

保罗创造了

注释回调

您还可以添加文件注释(例如上述内容)添加回调取决于)和标有特定注释的课程。

在这里,我们只需记录标有标有的每个类的定义MarkerAnnotation.

MarkerAnnotation.

细胞回调

描述符允许您添加库加载时执行的回调(在里面)在执行每个小区之前(initcell.)。新的集成方法还允许您轻松添加这些回调,并提供支持在单元格执行后触发的回调。让我们看看它是如何工作的。

在近亲之前

在这里你看到了一个用法笔记本变量,提供有关当前笔记本的一些信息。

依赖关系,渲染器等

还有一些方法可以用来改善jupyter集成,如使成为进口依赖性存储库,和更多。看看jupyterintegration完整列表的代码。

请注意,您可以标记@JupyterLibrary.任何实现的类图书馆契约或者LibraryDefinitionProducer。没有必要延伸jupyterintegration

提供了本节中的所有代码这里。您还可以找到更复杂的集成示例DataFrame库

Maven Artifacts为您的用例

我们现在发布一个套伪影到Maven Central,欢迎您在您自己的图书馆中使用它们。

Kotlin-Jupyter-APIKotlin-Jupyter-API-Annotations文物在上述基于代码的集成场景中使用。您通常不会手动添加它们 - Gradle Plugin为您提供。这些工件可以帮助某些情况,例如,如果您不使用Gradle或只是想从API中使用某些类而无需集成它。

如果您只想使用KOTLIN REPL配置和内核中使用的编译相关的功能,您可能对您感兴趣Kotlin-Jupyter-Shared-Compiler文物。此工件旨在与IntelliJ平台一致,因此您可以使用它来制作Intellij插件。

Kotlin-Jupyter-lib-ext是一个通用库,包括用于图像和HTML呈现的功能。你可以用笔记本加载它%使用lib-ext。它不包含在内核分发中,因为它可能需要将来覆盖额外的依赖性,并且默认情况下捆绑它们并不是一个好主意。

最后,你可以依赖Kotlin-Jupyter-erernel如果您需要整个内核捆绑到您的应用程序中。你可以使用embedkernel.启动内核服务器的方法。

其他工件没有明确的用例,并且只是其他工件的传递依赖性。

如果您的用例未被涵盖,请打开一个问题或联系我们#datascienceKotlin Slack的渠道。

kotlin 1.5.0和错误修复

底层Kotlin编译器版本已更新为1.5.0预发布。它目前不使用新的JVM IR后端,但我们会尽快发生这种情况。主要的是,我们修复了正在影响脚本内隐式接收器更新的Repl编译器中的错误,因此表现应该更好地为具有大量执行单元格的笔记本电脑。

还修复了许多额外的错误,包括这些特别奇怪的错误:

  • 笔记本客户端中的无关紧要错误弹出窗口(#109的)
  • 解析不正确%用魔法 (#110的)
  • 使用运行时范围的传递依赖项的解决不起作用
  • 将内核stdlib泄漏到脚本类路径中(#27的)

查看发布的变更乐有关详细信息。

让kotlin!

发现更多