Работа с 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
, для которой доступно только явное перечисление всех пакетов.