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

7. Реестры

Реестры содержат информацию о пакетах, например о доступных выпусках и зависимостях, а также о том, где их можно скачать. Реестр General является заданным по умолчанию и устанавливается автоматически, если другие реестры не установлены.

Управление реестрами

Реестры можно добавлять, удалять и обновлять как из REPL Pkg, так и с помощью функционального API. В этом разделе описывается интерфейс REPL. Сведения об API реестра приведены в разделе Справка по API реестра.

Добавление реестров

Пользовательский реестр можно добавить с помощью команды registry add из REPL Pkg. Обычно это делается с помощью URL-адреса реестра.

Если был установлен пользовательский реестр, в результате чего реестр General не был установлен автоматически, его легко добавить вручную: он будет добавлен автоматически. В этом случае можно просто добавить General,

pkg> registry add General

и все пакеты, зарегистрированные в General, доступны для, например, добавления. Чтобы узнать, какие реестры установлены в данный момент, можно воспользоваться командой registry status (или registry st)

pkg> registry st
Registry Status
 [23338594] General (https://github.com/JuliaRegistries/General.git)

Реестры всегда добавляются в пользовательское хранилище, которое является первой записью в DEPOT_PATH (см. раздел Глоссарий).

Возможно, сервер пакетов представляет дополнительные доступные реестры пакетов . Когда Pkg запускается с чистым хранилищем Julia (например, после новой установки) с пользовательским сервером пакетов, настроенным с помощью JULIA_PKG_SERVER, будут автоматически добавлены все такие доступные реестры. Если в хранилище уже установлены некоторые реестры (например, General), дополнительные реестры можно легко установить с помощью команды registry add без аргументов.

Удаление реестров

Для удаления реестров можно использовать команду registry remove (или registry rm). Здесь мы удалим реестр General:

pkg> registry rm General
  Removing registry `General` from ~/.julia/registries/General

pkg> registry st
Registry Status
  (no registries found)

В случае, если установлено несколько реестров с именем General, вам придется различать их с помощью uuid, как и при работе с пакетами. Например:

pkg> registry rm General=23338594-aafe-5451-b93e-139f81909106
  Removing registry `General` from ~/.julia/registries/General

Обновление реестров

Для обновления реестров доступна команда registry update (или registry up). Здесь мы обновим реестр General:

pkg> registry up General
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General`

а чтобы обновить все установленные реестры, просто выполните следующее:

pkg> registry up
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General`

Реестры автоматически обновляются один раз в каждом сеансе при выполнении операции с пакетом, поэтому обновление вручную осуществляется редко.

Формат реестра

В реестре каждый пакет имеет собственный каталог, в котором находятся следующие файлы: Compat.toml, Deps.toml, Package.toml и Versions.toml. Форматы этих файлов описываются ниже.

Файл Compat.toml реестра

Файл Compat.toml содержит ряд блоков, указывающих номера версий, а также набор зависимостей, перечисленных ниже. Например, часть такого файла может выглядеть следующим образом:

["0.8-0.8.3"]
DependencyA = "0.4-0.5"
DependencyB = "0.3-0.5"

["0.8.2-0.8.5"]
DependencyC = "0.7-0"

Зависимости, которые остаются неизменными в разных версиях, объединяются в эти блоки. Интерпретация этих диапазонов приведена в комментарии после каждой строки ниже:

"0.7-0.8"  # [0.7.0, 0.9.0)
"0.7-0"    # [0.7.0, 1.0.0)
"0.8.6-0"  # [0.8.6, 1.0.0)
"0.7-*"    # [0.7.0, ∞)

Так, для этого пакета версии [0.8.0, 0.8.3] зависят от версий [0.4.0, 0.6.0) зависимости DependencyA и версии [0.3.0, 0.6.0) зависимости DependencyB. Между тем, верно и то, что для версий [0.8.2, 0.8.5] требуются определенные версии DependencyC (так что для версий 0.8.2 и 0.8.3 требуются все три).

Виды реестров

Стандартный сервер Pkg (pkg.julialang.org) предлагает два различных «вида» реестров.

Совместимость: Julia 1.8

Виды реестров доступны только начиная с Julia версии 1.8.

  • conservative: подходит для большинства пользователей; все пакеты и артефакты в этом виде реестра доступны с сервера Pkg без необходимости скачивания из других источников.

  • eager: этот реестр предлагает последние версии пакетов, даже если сервер Pkg и сервер хранилища не закончили их обработку; таким образом, некоторые пакеты и артефакты могут быть недоступны с сервера Pkg и их придется скачивать из других источников (например, с сайта GitHub).

Видом реестра по умолчанию является conservative. Рекомендуется, чтобы большинство пользователей использовали вид conservative, если только они не знают, что им нужно работать с видом eager.

Чтобы выбрать вид eager:

ENV["JULIA_PKG_SERVER_REGISTRY_PREFERENCE"] = "eager"

import Pkg

Pkg.Registry.update()

Чтобы выбрать вид conservative:

ENV["JULIA_PKG_SERVER_REGISTRY_PREFERENCE"] = "conservative"

import Pkg

Pkg.Registry.update()

Создание и поддержка реестров

Pkg предоставляет только клиентские средства для работы с реестрами, а не функциональные возможности для их создания или поддержки. Однако Registrator.jl и LocalRegistry.jl предлагают способы создания и обновления реестров, а в RegistryCI.jl доступны функции автоматического тестирования и слияния для поддержки реестра.