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

Pkg

Pkg — это встроенный менеджер пакетов Julia, который выполняет такие операции, как установка, обновление и удаление пакетов.

Далее следует очень краткое введение в Pkg. Для получения дополнительной информации о файлах Project.toml, файлах Manifest.toml, совместимости версий пакетов ([compat]), средах, реестрах и т. д. настоятельно рекомендуется прочитать полное руководство, которое доступно здесь: https://pkgdocs.julialang.org.

Ниже представлен краткий обзор Pkg, диспетчера пакетов Julia. Этот обзор должен помочь новым пользователям познакомиться с функциями Pkg.

Диспетчер Pkg поставляется со своей средой командной строки REPL. Чтобы войти в REPL для Pkg, нажмите в REPL Julia клавишу ]. Вернуться в REPL Julia можно, нажав Backspace или ^C.

В этом руководстве команды Pkg выполняются в REPL Pkg. Для неинтерактивной работы рекомендуем использовать API-интерфейс Pkg. Полная документация к API Pkg приведена в документации Pkg в разделе Справка по API.

При входе в REPL Pkg вы увидите подобное приглашение:

(v1.1) pkg>

Для добавления пакета используйте add:

(v1.1) pkg> add Example

Некоторые выводимые данные Pkg были опущены, чтобы сосредоточиться в руководстве на главном. Это позволит нам не погружаться в более сложные детали и двигаться в быстром темпе. Изучить все более подробно можно будет в последующих разделах Pkg-руководства.

Мы также можем указать множество пакетов одновременно:

(v1.1) pkg> add JSON StaticArrays

Для удаления пакетов используйте rm:

(v1.1) pkg> rm JSON StaticArrays

Пока что мы использовали только зарегистрированные пакеты, но Pkg поддерживает работу и с незарегистрированными. Для добавления незарегистрированного пакета укажите URL-адрес:

(v1.1) pkg> add https://github.com/JuliaLang/Example.jl

Этот пакет можно удалить, указав его имя, с помощью rm:

(v1.1) pkg> rm Example

Для обновления установленного пакета используйте update:

(v1.1) pkg> update Example

Для обновления всех установленных пакетов используйте update без каких-либо аргументов:

(v1.1) pkg> update

До настоящего момента мы рассматривали простейшее управление пакетами: их добавление, обновление и удаление. Если вы уже использовали другие диспетчеры пакетов, это будет вам знакомо. Однако Pkg обеспечивает значительные преимущества по сравнению с традиционными диспетчерами, позволяя организовывать зависимости в среды.

Возможно, вы заметили, что в приглашении REPL указано (v1.1). Это сообщает нам, что версия v1.1 является активной средой. Именно активная среда будет изменяться командами Pkg, такими как add, rm и update.

Давайте настроим новую среду и поэкспериментируем. Чтобы задать активную среду, используйте activate:

(v1.1) pkg> activate tutorial
[ Info: activating new environment at `/tmp/tutorial/Project.toml`.

Pkg сообщает нам о создании новой среды и о том, что она будет храниться в директории /tmp/tutorial.

Pkg также отражает новую активную среду, обновляя приглашение REPL:

(tutorial) pkg>

Чтобы запросить информацию об активной среде, можно использовать status:

(tutorial) pkg> status
    Status `/tmp/tutorial/Project.toml`
   (empty environment)

/tmp/tutorial/Project.toml — это расположение файла проекта активной среды. В файле проекта Pkg хранит метаданные для среды. Обратите внимание, что эта новая среда пуста. Давайте добавим в нее пакет:

(tutorial) pkg> add Example
...

(tutorial) pkg> status
    Status `/tmp/tutorial/Project.toml`
  [7876af07] Example v0.5.1

Как видите, среда tutorial теперь содержит зависимость Example.

Предположим, мы работаем с Example и хотим добавить туда новые функции. Как нам изменить исходный код? Мы можем настроить git-клон пакета Example, используя develop.

(tutorial) pkg> develop --local Example
...

(tutorial) pkg> status
    Status `/tmp/tutorial/Project.toml`
  [7876af07] Example v0.5.1+ [`dev/Example`]

Обратите внимание, что выдаваемая информация изменилась. dev/Example указывает расположение только что созданного клона. Если заглянуть в директорию /tmp/tutorial, в ней будут следующие файлы:

tutorial
├── dev
│   └── Example
├── Manifest.toml
└── Project.toml

Вместо загрузки зарегистрированной версии Example Julia загрузит исходный код, содержащийся в tutorial/dev/Example.

Попробуем сделать это. Сначала изменим файл tutorial/dev/Example/src/Example.jl и добавим простую функцию:

plusone(x::Int) = x + 1

Теперь мы можем вернуться в REPL Julia и загрузить пакет:

julia> import Example

Пакет можно загрузить в сеансе Julia только один раз. Если вы уже выполнили import Example в текущем сеансе Julia, потребуется перезапустить Julia и повторно выполнить activate tutorial в REPL Pkg. Пакет Revise.jl позволяет существенно упростить эту процедуру, но его настройка не рассматривается в настоящем руководстве.

Среда Julia должна загрузить наш новый код. Давайте его протестируем:

julia> Example.plusone(1)
2

Предположим, мы передумали и решили, что столь лаконичный код нам сейчас не подходит. Мы можем указать Pkg, чтобы диспетчер перестал работать с локальным клоном и использовал вместо него зарегистрированную версию. Это можно сделать с помощью free:

(tutorial) pkg> free Example

Закончив экспериментировать с tutorial, вы можете вернуться в среду по умолчанию, запустив activate без аргументов:

(tutorial) pkg> activate

(v1.1) pkg>

Если вы когда-либо не будете знать, что делать, вы можете обратиться к Pkg за справкой:

(v1.1) pkg> ?

Должен отобразиться список доступных команд с короткими описаниями. Укажите конкретную команду, чтобы получить более подробные сведения:

(v1.1) pkg> ?develop

Это руководство должно помочь вам начать работу с Pkg. Диспетчер Pkg обладает значительно большими возможностями по работе с пакетами. Читайте полное руководство, чтобы узнать больше!