Engee 文档

代码重复使用

用 Julia 开发程序时,经常需要在不同的项目中重复使用相同的代码。在这种情况下,以模块或包的形式组织代码是很方便的。

*模块*是一种更简单的代码组织方式。它代表一个文件,其中包含合并到一个命名空间的函数、变量和其他元素(参见Modules )。模块便于本地开发和代码重用。

包*是一种更全面的结构,不仅包括代码,还包括项目描述、依赖关系、版本等元数据。软件包由 Julia 本身通过 Pkg 软件包管理器进行维护,允许对依赖关系和版本进行管理。

与包不同,模块本身不支持通过 Pkg 进行自动依赖管理。这可能会导致在未安装依赖项或依赖项版本不正确的情况下,模块无法正常工作。而软件包则允许 Julia 自动跟踪和管理依赖关系,从而使模块更可靠、更易于重用和发布。

创建模块

如果目标是创建代码并在日后重复使用,你可以只创建自己的模块。为此,请在文件浏览器file browser 7 中以所需名称在所需目录下创建一个未来模块文件,例如在路径 /user/mymodule`下创建文件 `my_module.jl

使用 module 命令添加模块内容,如函数:

module my_module
    function get_value(x)
        return x
    end
end
在 Julia 中,模块名不必与文件名相同,但在使用 usingimport 连接模块时,应准确使用模块内指定的名称。

将模块路径添加到 Julia 路径手动 或使用命令:

engee.addpath("/user/mymodule")

使用 using 操作符加载模块:

using my_module

加载模块后,就可以调用其中的函数(或任何其他内联代码):

my_module.get_value(7)
7

创建软件包

要创建自己的软件包,首先要使用 generate 命令创建一个基本的项目结构。为此,请将命令行切换到 shell shell 模式(键; ),并导航到要创建软件包的目录。例如

cd My_libs

# вывод
/user/My_libs

使用 generate 命令生成一个新项目(首先在命令行点击]切换到 pkg> 软件包管理器):

generate My_lib # будет создан проект My_lib с файлами Project.toml и src/My_lib.jl

#вывод
  Generating  project Test_lib:
    My_lib/Project.toml
    My_lib/src/My_lib.jl

每个新软件包都必须运行一次 generate 命令。该命令将创建初始项目结构,包括文件 Project.tomlsrc/package name.jl。生成后,您就可以开发软件包、添加代码、配置依赖关系等。

Julia 中的项目是一种结构,包括组织、依赖管理和版本管理所需的配置文件和目录。软件包可由一个或多个文件组成,并可加载到任何 Julia 项目中。

软件包的源代码将放置在 src 文件夹中。默认情况下,创建的软件包文件将包含代码:

module My_lib

greet() = print("Hello World!")

end # module My_lib

使用不同的模块名称,用以下代码替换文件内容:

module My_lib
    function get_value(x)
        return x
    end
end

接下来,在 Pkg 模式下,使用 develop 命令将项目添加到当前会话:

develop /user/My_libs/My_lib/

#вывод
   Resolving package versions...
    Updating `~/.project/Project.toml`
  [487ef170] + My_lib v0.1.0 `~/My_libs/My_lib`
    Updating `~/.project/Manifest.toml`
  [487ef170] + My_lib v0.1.0 `~/My_libs/My_lib`

这里:

  • *Julia中的会话*是当前的工作环境,由包管理器(Pkg)管理,它定义了用于执行代码的可用包和项目。会话包括 "Project.toml "和 "Manifest.toml "配置文件,它们捕获了软件包的版本和依赖关系信息,允许 Julia 管理项目及其依赖关系。

  • Project.toml - 描述软件包的元数据,包括其名称、版本、作者以及与其他软件包的依赖关系。这是帮助 Julia 管理软件包及其版本的主要文件。使用 "生成 "命令时会自动创建该文件。

  • Manifest.toml - 记录软件包所有依赖项(包括它们的子依赖项)的确切版本。它在安装依赖包或通过 Pkg 添加软件包时自动创建。当使用 develop 命令连接到当前会话时,它会自动创建。

当前环境中的每个软件包都必须运行一次 develop 命令。然后,软件包将被添加到环境中,你可以在代码中使用它。如果将来对软件包进行了修改,它们将自动可用,而无需再次运行 develop 命令,因为该命令会在环境中创建对软件包的符号引用。

要使用创建的软件包,请使用 importusing 操作符:

using My_lib

# или import My_lib

使用 generate 创建软件包提供了一种便于依赖和版本管理的结构。它还简化了软件包的发布。

在开发模块和软件包时,您可能需要重启内核以重新加载当前会话中的 Julia 进程。为此,请单击 反馈意见 kernel reboot 1 工作区,然后选择kernel reboot 内核重启 或使用命令

engee.clear_all()

要发布软件包,需要将软件包文件上传到共享仓库,共享仓库可以是各种主机,如git.engee.com。有关使用远程仓库和上传本地文件的更多信息,请参阅我们关于Git(*Engee*使用的版本控制系统)的系列文章。Julia 软件包也可以在 Julia 软件包总注册中心注册。请使用工具Registrator.jl 进行注册。

软件包可以使用版本库 URL(如 GitHub)进行安装:

using Pkg
Pkg.add("https://github.com/username/repositoryname")

如果软件包已通过 Registrator.jl 成功注册,则可使用标准命令进行安装:

using Pkg
Pkg.add("LibraryName")