Документация Engee

Работа с EngeePkg

Используйте пакет EngeePkg для четкого разделения пользовательских и системных пакетов и для расширенного функционала работы с ними в вашем проекте.

EngeePkg — это надстройка над менеджером пакетов Pkg, реализованная как самостоятельный пакет для лучшего контроля над загруженными модулями и пакетами.

EngeePkg обладает следующими преимуществами перед Pkg:

  • EngeePkg различает системные и пользовательские пакеты, выделяя среди системных те, что входят в системный образ. По умолчанию функция EngeePkg.status выдает всю информацию из LOAD_PATH. Классический Pkg с функцией Pkg.status не обладает таким функционалом и выдает информацию о пакетах только из одного проекта (по умолчанию — активного). Более того, EngeePkg.status, в отличие от Pkg.status, может выдавать информацию о загруженных модулях.

  • EngeePkg очищает весь пользовательский проект, удаляя все установленные пакеты функцией EngeePkg.purge без явного перечисления. Классический 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.status и EngeePkg.purge на конкретных примерах.

Функция EngeePkg.status

Функция EngeePkg.status выводит статус установленных пакетов и/или загруженных модулей. EngeePkg.status, в отличие от Pkg.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.status менеджера пакетов Pkg может выдавать информацию о пакетах только из одного проекта (по умолчанию — активного). Например:

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 получает выборку установленных пакетов и/или загруженных модулей в виде массива описаний пакетов. Аргументы modules и mode имеют тот же смысл, что в EngeePkg.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, для которой доступно только явное перечисление всех пакетов.