如何开发 Julia 包

一个包包含模块、测试和文档。它扩展了核心 Julia 功能。您可以通过开发一个包来与社区分享您的代码。在本教程中,您将学习如何开发一个 Julia 包并将其注册到 Julia 通用注册中心

您可以使用内置的包管理器 PkgDev.jl 或包 PkgTemplates.jl 创建一个 Julia 包。此示例使用 PkgTemplates.jl,灵感来自下面的视频

在视频中,Chris Rackauckas 使用 Travis 作为持续集成 (CI) 工具。在本教程中,我们使用 GitHub Actions,这是目前首选方法。

此外,这是上面视频的总结。如果您想了解更多详细信息,我们建议您观看完整视频。要查找有关开发包和为现有包做出贡献的更多信息,请参阅视频描述中的时间戳。

先决条件

在您开始开发包之前,请确保您执行以下步骤

  1. 在您的本地机器上安装 Julia

  2. 安装一个 IDE 并将其配置为与 Julia 一起使用。

  3. 了解 Julia 中的模块是如何工作的.

  4. 创建一个 GitHub 帐户(如果您还没有)。

注意:如果遇到任何问题,请记住您可以 从社区获得帮助

步骤 1:创建您的包

如上所述,一个包包含模块、测试和文档。我们使用 PkgTemplates.jl,它可以帮助我们创建所有这些文件以及包的配置。

在创建您的包之前,您需要定义一个包含初始配置的模板。首先,您需要安装 PkgTemplates.jl

在 Julia REPL 中,运行以下命令

using Pkg
Pkg.add("PkgTemplates")

现在,通过在 Julia REPL 中执行以下命令来创建您的包模板

using PkgTemplates

t = Template(;
           user="your-GitHub-username",
           authors=["your-name"],
           plugins=[
               License(name="MIT"),
               Git(),
               GitHubActions(),
           ],
       )

请确保将 your-GitHub-username 替换为您的实际 GitHub 用户名,并将 your-name 替换为您的姓名。有关所有可用选项的更多信息,请参阅 PkgTemplates 用户指南

现在,要在 Julia REPL 中创建包,请执行以下命令

t("YourPackageName")

YourPackageName 替换为您的包的实际名称。请注意,Julia 中的包以大写字母开头。有关如何正确命名包的更多信息,请参阅 包命名指南

PkgTemplates.jl 创建新包后,它会将源文件存储在 Linux 上的 ~/.julia/dev 和 Windows 上的 %USERNAME%/.julia/dev 中。如果您不想从这里工作,则将源文件移动到您首选的位置。您的包目录包含以下内容

步骤 2:为您的包创建一个 GitHub 存储库

您需要创建一个 GitHub 存储库来存储和共享您的包。有关如何创建新的 GitHub 存储库的更多信息,请参阅 创建存储库。特别是,在创建存储库时,请确保您考虑以下事项

步骤 3:编写代码

现在,您可以开始编写代码。您可以在子文件夹 src/ 中找到一个与您的包同名的文件 (YourPackageName.jl)。您可以将您的代码添加到文件 YourPackageName.jl 中。但是,如果您的包包含许多函数,那么最好将其分成多个文件。然后,您可以使用 include 命令从主文件 (YourPackageName.jl) 调用这些函数。

要在 YourPackageName.jl 中包含来自不同文件的函数

  1. src/ 文件夹中,创建一个名为 functions.jl 的文件。

  2. 将以下文本添加到文件 functions.jl

function greet_your_package_name()
    return "Hello YourPackageName!"
end
  1. 导出函数 greet_your_package_name(),以便用户可以像这样访问它

export greet_your_package_name
  1. 在主文件 YourPackageName.jl 中,使用以下命令包含 functions.jl 文件

include("functions.jl")

最后,主文件 (YourPackageName.jl) 的完整内容如下

module YourPackageName

export greet_your_package_name
include("functions.jl")

end

您可以按照上述过程包含任意数量的函数和文件。

步骤 4:测试您的包

测试对于确保您的包正常运行是必要的。当您创建一个新的包时,PkgTemplates.jl 会为您的测试创建启动代码 (test/runtests.jl)。然后,您可以为编写的每个新函数添加测试。

例如,以下代码测试函数 greet_your_package_name()

using YourPackageName
using Test

@testset "YourPackageName.jl" begin
    @test YourPackageName.greet_your_package_name() == "Hello YourPackageName!"
    @test YourPackageName.greet_your_package_name() != "Hello world!"
end

要运行上面定义的测试

  1. 在您的终端中,转到您的包目录。

  2. 打开 Julia REPL。

  3. 通过输入 ] 转到 包模式

  4. 通过运行 activate . 命令激活包环境。

  5. 在包模式下,运行命令 test

julia> ] # Go to the package mode
(v1.8) pkg> activate .
(YourPackageName) pkg> test

测试摘要提供已通过的测试数量(除以现有测试的总数)。

步骤 5:注册您的包

当您准备好分享您的包时,您需要将其注册到 Julia 通用注册中心。注册您的包后,其他用户可以使用 Pkg.add(“PackageName”) 安装它。

要注册您的包

  1. 转到 Registrator 存储库。

  2. 单击 安装应用程序 按钮以安装 Julia Registrator 应用程序。

  3. 在您的包存储库中,创建一个新的问题

  4. 发表评论 文本字段中,添加以下文本

@JuliaRegistrator register()

Julia Registrator 应用程序会自动为 Julia 通用注册中心创建一个新的拉取请求。社区将审查您的包,并可能发表评论或建议更改。在 Julia 通用注册中心维护人员批准拉取请求后,您的包将添加到可用包列表中。

后续步骤

在您继续开发包时,您可能需要添加新功能或修复错误。此外,您可能决定需要向项目添加依赖项(其他包)。因此,您需要更新 Project.toml 文件以反映对包的更新。

在本节中,我们将介绍对包进行版本控制和添加新依赖项的步骤。

版本控制

在您继续开发包时,您需要更新其版本。它使您能够跟踪对包的不同更改。一个 包版本 是一个包含三位数字 (X.X.X) 的数字。版本中的数字表示以下内容

根据以下指南更新您的包版本数字

要更新包的版本,请打开 Project.toml 文件并修改 version 变量。

添加新依赖项

与其重新发明轮子并从头开始创建所有内容,不如加载社区已经创建的包。您只需要将新的依赖项添加到项目中,并像在 Julia 中通常那样 调用函数

要将新的依赖项添加到您的包中

  1. 在您的终端中,转到您的包目录。

  2. 打开 Julia REPL。

  3. 通过输入 ] 转到 模式。

  4. 通过运行 activate 命令激活包环境。

  5. 通过运行命令 add PackageName 添加新的包。

julia> ] # Go to the package mode
(v1.8) pkg> activate YourPackageName # Your package name
(YourPackageName) pkg> add PackageName

注意:您可以通过在包名称之间留出空格来添加多个包。

Julia 包管理器 Pkg.jl 会将新的依赖项添加到文件 Project.toml 中,并将其他生成的依赖项添加到文件 Manifest.toml 中。

恭喜!您已创建您的 第一个 Julia 包 并将其 注册到 Julia 通用注册中心。现在,您可以继续您的开源贡献之旅,创建自己的包或 建议对其他包进行更改