一个包包含模块、测试和文档。它扩展了核心 Julia 功能。您可以通过开发一个包来与社区分享您的代码。在本教程中,您将学习如何开发一个 Julia 包并将其注册到 Julia 通用注册中心。
您可以使用内置的包管理器 PkgDev.jl 或包 PkgTemplates.jl 创建一个 Julia 包。此示例使用 PkgTemplates.jl
,灵感来自下面的视频
在视频中,Chris Rackauckas 使用 Travis 作为持续集成 (CI) 工具。在本教程中,我们使用 GitHub Actions,这是目前首选方法。
此外,这是上面视频的总结。如果您想了解更多详细信息,我们建议您观看完整视频。要查找有关开发包和为现有包做出贡献的更多信息,请参阅视频描述中的时间戳。
在您开始开发包之前,请确保您执行以下步骤
安装一个 IDE 并将其配置为与 Julia 一起使用。
创建一个 GitHub 帐户(如果您还没有)。
注意:如果遇到任何问题,请记住您可以 从社区获得帮助。
如上所述,一个包包含模块、测试和文档。我们使用 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
中。如果您不想从这里工作,则将源文件移动到您首选的位置。您的包目录包含以下内容
LICENSE
:您的包使用的许可证。在此示例中,我们设置了 MIT 许可证。
Manifest.toml
:它包含有关包依赖项的信息。有关项目和清单文件的更多信息,请参阅 Pkg.jl 文档。
Project.toml
:它包含有关项目的顶层信息。
README.md
:它包含有关您的包的信息。例如,README 文件包含有关如何安装您的包以及如何使用它的示例的信息。
src
:它包含文件 YourPackageName.jl
。这是您编写包代码的地方。
test
:它包含文件 runtests.jl
。这是您编写包测试代码的地方。
.github
:它包含用于 使用 GitHub Actions 进行持续集成 的 yaml
文件。
您需要创建一个 GitHub 存储库来存储和共享您的包。有关如何创建新的 GitHub 存储库的更多信息,请参阅 创建存储库。特别是,在创建存储库时,请确保您考虑以下事项
将存储库命名为您的包名。
将 .jl
添加到存储库的名称中。在此示例中,您需要将存储库命名为 YourPackageName.jl
。
保持 使用以下内容初始化此存储库 选项未选中。
现在,您可以开始编写代码。您可以在子文件夹 src/
中找到一个与您的包同名的文件 (YourPackageName.jl
)。您可以将您的代码添加到文件 YourPackageName.jl
中。但是,如果您的包包含许多函数,那么最好将其分成多个文件。然后,您可以使用 include 命令从主文件 (YourPackageName.jl
) 调用这些函数。
要在 YourPackageName.jl
中包含来自不同文件的函数
在 src/
文件夹中,创建一个名为 functions.jl
的文件。
将以下文本添加到文件 functions.jl
中
function greet_your_package_name()
return "Hello YourPackageName!"
end
导出函数 greet_your_package_name()
,以便用户可以像这样访问它
export greet_your_package_name
在主文件 YourPackageName.jl
中,使用以下命令包含 functions.jl
文件
include("functions.jl")
最后,主文件 (YourPackageName.jl) 的完整内容如下
module YourPackageName
export greet_your_package_name
include("functions.jl")
end
您可以按照上述过程包含任意数量的函数和文件。
测试对于确保您的包正常运行是必要的。当您创建一个新的包时,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
要运行上面定义的测试
在您的终端中,转到您的包目录。
打开 Julia REPL。
通过输入 ]
转到 包模式。
通过运行 activate .
命令激活包环境。
在包模式下,运行命令 test
。
julia> ] # Go to the package mode
(v1.8) pkg> activate .
(YourPackageName) pkg> test
测试摘要提供已通过的测试数量(除以现有测试的总数)。
当您准备好分享您的包时,您需要将其注册到 Julia 通用注册中心。注册您的包后,其他用户可以使用 Pkg.add(“PackageName”)
安装它。
要注册您的包
转到 Registrator 存储库。
单击 安装应用程序 按钮以安装 Julia Registrator 应用程序。
在您的包存储库中,创建一个新的问题。
在 发表评论 文本字段中,添加以下文本
@JuliaRegistrator register()
Julia Registrator 应用程序会自动为 Julia 通用注册中心创建一个新的拉取请求。社区将审查您的包,并可能发表评论或建议更改。在 Julia 通用注册中心维护人员批准拉取请求后,您的包将添加到可用包列表中。
在您继续开发包时,您可能需要添加新功能或修复错误。此外,您可能决定需要向项目添加依赖项(其他包)。因此,您需要更新 Project.toml
文件以反映对包的更新。
在本节中,我们将介绍对包进行版本控制和添加新依赖项的步骤。
在您继续开发包时,您需要更新其版本。它使您能够跟踪对包的不同更改。一个 包版本 是一个包含三位数字 (X.X.X
) 的数字。版本中的数字表示以下内容
第一位数字:主版本
第二位数字:次版本
第三位数字:补丁号
根据以下指南更新您的包版本数字
如果您进行重大更改,请增加第一位数字。
如果您添加了新功能,请增加第二位数字。
如果您修复了错误,请增加第三位数字。
要更新包的版本,请打开 Project.toml
文件并修改 version
变量。
与其重新发明轮子并从头开始创建所有内容,不如加载社区已经创建的包。您只需要将新的依赖项添加到项目中,并像在 Julia 中通常那样 调用函数。
要将新的依赖项添加到您的包中
在您的终端中,转到您的包目录。
打开 Julia REPL。
通过输入 ]
转到 包 模式。
通过运行 activate
命令激活包环境。
通过运行命令 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 通用注册中心。现在,您可以继续您的开源贡献之旅,创建自己的包或 建议对其他包进行更改。