代码重复使用
用 Julia 开发程序时,经常需要在不同的项目中重复使用相同的代码。在这种情况下,以模块或包的形式组织代码是很方便的。
*模块*是一种更简单的代码组织方式。它代表一个文件,其中包含合并到一个命名空间的函数、变量和其他元素(参见Modules )。模块便于本地开发和代码重用。
包*是一种更全面的结构,不仅包括代码,还包括项目描述、依赖关系、版本等元数据。软件包由 Julia 本身通过 Pkg 软件包管理器进行维护,允许对依赖关系和版本进行管理。
与包不同,模块本身不支持通过 Pkg 进行自动依赖管理。这可能会导致在未安装依赖项或依赖项版本不正确的情况下,模块无法正常工作。而软件包则允许 Julia 自动跟踪和管理依赖关系,从而使模块更可靠、更易于重用和发布。
创建模块
如果目标是创建代码并在日后重复使用,你可以只创建自己的模块。为此,请在文件浏览器 中以所需名称在所需目录下创建一个未来模块文件,例如在路径
/user/mymodule`下创建文件 `my_module.jl
。
使用 module
命令添加模块内容,如函数:
module my_module
function get_value(x)
return x
end
end
在 Julia 中,模块名不必与文件名相同,但在使用 using 或 import 连接模块时,应准确使用模块内指定的名称。
|
将模块路径添加到 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.toml
和 src/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 命令,因为该命令会在环境中创建对软件包的符号引用。
|
要使用创建的软件包,请使用 import
或 using
操作符:
using My_lib
# или import My_lib
使用 generate
创建软件包提供了一种便于依赖和版本管理的结构。它还简化了软件包的发布。
在开发模块和软件包时,您可能需要重启内核以重新加载当前会话中的 Julia 进程。为此,请单击 反馈意见
|
要发布软件包,需要将软件包文件上传到共享仓库,共享仓库可以是各种主机,如git.engee.com。有关使用远程仓库和上传本地文件的更多信息,请参阅我们关于Git(*Engee*使用的版本控制系统)的系列文章。Julia 软件包也可以在 Julia 软件包总注册中心注册。请使用工具Registrator.jl 进行注册。 软件包可以使用版本库 URL(如 GitHub)进行安装:
如果软件包已通过 Registrator.jl 成功注册,则可使用标准命令进行安装:
|