Engee 文档

使用 EngeePkg

使用 EngeePkg 软件包可明确区分用户和系统软件包,并在项目中实现高级软件包处理功能。 EngeePkg 是 Pkg 软件包管理器的附加组件,作为独立软件包实现,可更好地控制加载的模块和软件包。

与 Pkg 相比,EngeePkg 具有以下优势:

  • EngeePkg可区分系统包和用户包,将系统映像中包含的包与系统包区分开来。默认情况下,EngeePkg.status 函数会输出来自LOAD_PATH 的所有信息。使用`Pkg.status`函数的经典 Pkg 不具备此功能,只能输出一个项目(默认情况下是活动项目)中的软件包信息。此外,与 Pkg.status 不同,EngeePkg.status 可以提供已加载模块的信息。

  • 通过使用`EngeePkg.purge`函数移除所有已安装的软件包,EngeePkg 可以清理整个用户项目,而无需明确列出这些软件包。Classic Pkg 使用 Pkg.rm 函数清除项目,但需要明确枚举所有软件包。

要使用 EngeePkg,请将其添加到当前环境(项目)中:

Pkg.add("EngeePkg")

将 EngeePkg 导入工作区(命令行或脚本编辑器):

using EngeePkg

请参阅命令行上的 "帮助"(使用问号? 切换到 "help? "模式),以输出可用的 EngeePkg 命令:

ALL_MODULES         CLI                 INIT_MODULES        INSTALLED_MODULES
LOADED_MODULES      PKGMODE_MANIFEST    PKGMODE_PROJECT     PKGSORT_BY_NAME
PKGSORT_BY_SRCPATH  PKGSORT_BY_UUID     PKGSORT_NONE        PkgUtils
SYSTEM_MODULES      Status              USER_MODULES        eval
include             purge               select_packages     status

接下来,让我们通过具体例子来了解 EngeePkg.statusEngeePkg.purge 函数。

函数 EngeePkg.status.

函数 EngeePkg.status 显示已安装软件包和/或已下载模块的状态。与 Pkg.status 不同,EngeePkg.status 可以显示已加载模块的信息,区分系统和用户软件包,并确定系统映像中包含哪些软件包。

EngeePkg.status`函数签名:

EngeePkg.status(modules::Union{String, UUID, Module, ModuleSelection};
                  mode::PackageMode, sort::PkgSortOrder, outdated::Bool, io::IO)

可选的第一个参数 modules 指定了一个软件包/模块的选择。它可以是一个特定软件包的名称或 UUID,也可以是一个模块,或者是一个指定多个软件包/模块的常量:

  • USER_MODULES - 从用户软件包中安装。

  • SYSTEM_MODULES - 从系统软件包中安装。

  • INSTALLED_MODULES - 安装在所有项目中(列出所有 LOAD_PATH 项中的软件包)。

  • LOADED_MODULES - 载入内存的软件包(包括未安装的软件包)。

  • INIT_MODULES - 从系统映像加载到内存中的软件包。

  • ALL_MODULES (默认) - 所有已安装和已加载的软件包(列出所有 LOAD_PATH 项中的软件包)。 io 参数指定输出终端(默认为 stdout`)。

sort` 参数指定枚举的顺序:

  • PKGSORT_BY_NAME` - 按数据包名称排序;

  • PKGSORT_BY_SRCPATH` - 按已安装软件包的源文件位置排序;

  • PKGSORT_BY_UUID - 按软件包 UUID 排序;

  • PKGSORT_NONE` (默认) - 不排序。

参数 mode 指定已安装软件包的采样模式:

  • PKGMODE_PROJECT` - 由项目文件 (Project.toml) 指定;

  • PKGMODE_MANIFEST` - 由清单文件 (Manifest.toml) 指定。

仅对已安装软件包(USER_MODULES, SYSTEM_MODULES, INSTALLED_MODULES)采样时,默认使用包含直接项目依赖关系数据的文件 (Project.toml)。选择已加载(LOADED_MODULES, INIT_MODULES, ALL_MODULES)以及按名称和 UUID 选择时,默认使用描述项目数据结构的文件 (Manifest.toml)。

输出使用与 Pkg.status 相同的格式。从多个项目中选择软件包时,会使用图标①、②等来区分它们。图标▣ 表示已下载的软件包。例如

Status ① `/user/.project/Manifest.toml`
             ② `/usr/local/julia-1.9.3/environments/v1.9/Manifest.toml`
 ⌅ [39de3d68] AxisArrays v0.4.6 ② ▣
 ⌅ [98e50ef6] JuliaFormatter v1.0.20 ② ▣
   [2aef5ad7] QueryOperators v0.9.3 ②
 ⌅ [48965c70] MatrixPencils v1.7.5 ② ▣
 ⌃ [69666777] Arrow v2.4.3 ②
   [49dc2e85] Calculus v0.5.1 ② ▣
   [efcefdf7] PCRE2_jll v10.42.0+0 ② ▣
 ⌅ [d8a4904e] MutableArithmetics v1.1.0 ② ▣
 ⌅ [aacddb02] JpegTurbo_jll v2.1.91+0 ② ▣

Pkg 软件包管理器的 Pkg.status 功能可以只输出一个项目(默认情况下处于活动状态)的软件包信息。例如

Status `/user/.project/Project.toml`
  [e36ba207] EngeePkg v0.0.7
  [4d00f742] GeometryTypes v0.8.5
⌅ [23fbe1c1] Latexify v0.15.18

EngeePkg.status "函数由 "EngeePkg.select_packages "连接。status "函数以人类可读的形式打印信息,而 "select_packages "函数则以数据对象的形式返回相同的信息,可以通过编程进行操作。

select_packages "函数的签名:

EngeePkg.select_packages(modules::Union{String, UUID, Module, ModuleSelection},
                           mode::PackageMode)

select_packages "函数以软件包描述数组的形式获取已安装软件包和/或已下载模块的样本。参数 modulesmodeEngeePkg.status 中的含义相同。

EngeePkg.purge 函数

purge "函数用于删除安装在指定环境中的所有软件包(默认情况下安装在用户项目中):

EngeePkg.purge()
命令执行输出
Updating `/user/.project/Project.toml` #удаление пакетов из Project.toml (пользовательские)
  [c3fe647b] - AbstractAlgebra v0.27.8
  [7d9f7c33] - Accessors v0.1.27
  [79e6a3ab] - Adapt v3.5.0
  [e36ba207] - EngeePkg v0.0.7
  [cd3eb016] - HTTP v1.5.4
  ...
  [91a5bcdd] - Plots v1.36.1
  [c3e4b0f8] - Pluto v0.19.40
  [438e738f] - PyCall v1.94.1
  [d330b81b] - PyPlot v2.11.2
  [3646fa90] - ScikitLearn v0.7.0
  [6a2ea274] - Torch v0.1.0
    Updating `/user/.project/Manifest.toml` ##удаление пакетов из Manifest.toml (системные)
  [c3fe647b] - AbstractAlgebra v0.27.8
  [7d9f7c33] - Accessors v0.1.27
  [79e6a3ab] - Adapt v3.5.0
  [b99e7846] - BinaryProvider v0.5.10
  [d1d4a3ce] - BitFlags v0.1.7
  ...
  [d360d2e6] - ChainRulesCore v1.15.7
  [944b1d66] - CodecZlib v0.7.1
  [19ecbf4d] - Codecs v0.5.0
  [35d6a980] - ColorSchemes v3.20.0
  [3da002f7] - ColorTypes v0.11.4

该函数用于彻底清理用户项目。Pkg 软件包管理器不支持此功能—​可使用 Pkg.rm 函数,但该函数只能明确列出所有软件包。