Работа с пакетами Julia
Пакеты Julia — это организованный набор готовых функций, классов и объектов для решения различных задач. Пакеты Julia можно установить с помощью менеджера пакетов Pkg и использовать в своих проектах. При необходимости более четкого разделения пакетов на пользовательские и системные — используйте EngeePkg.
В Engee работа с пакетами Julia также осуществляется через встроенный менеджер пакетов Pkg с помощью двух инструментов рабочего пространства — командную строку и редактор скриптов .
При работе с большим количеством пакетов удобно использовать редактор скриптов, в котором после вызова Pkg не требуется его повторная инициализация. Командная строка удобна в том случае, если вам привычнее работать с кодом вне интерфейса редактора скриптов и с небольшим количеством пакетов.
Подробное описание работы с менеджером пакетов Pkg можно найти здесь. |
Принцип работы с пакетами
-
Найдите точное название интересующего вас пакета. Экосистема Julia содержит более десяти тысяч пакетов, зарегистрированных в общем реестре, что может сильно затруднить поиск нужного пакета. Для оптимизации поиска рекомендуем обратиться к следующим источникам:
-
Программирование — раздел Engee с полной документацией по Julia на русском языке.
-
JuliaHub — сервис для поиска по всей зарегистрированной документации пакетов с открытым исходным кодом с возможностью сортировки по тегам и ключевым словам.
-
Julia Packages — онлайн-ресурс, предназначенный для поиска, изучения и просмотра пакетов Julia с возможностью настройки фильтров по категориям, популярности и датам.
-
Julia.jl — главный репозиторий пакетов для языка программирования Julia. Этот репозиторий хранится на платформе GitHub и содержит множество полезных пакетов и инструментов, разработанных сообществом для работы с языком Julia.
-
-
Выберите инструмент для работы с пакетами — командная строка или редактор скриптов в зависимости от ваших задач.
-
Инициализируйте работу с пакетами в Julia, добавив менеджер пакетов Pkg. Синтаксис добавления менеджера отличается в зависимости от выбранного инструмента.
-
Добавьте пакеты с помощью команды
add
в ваше окружение, чтобы использовать их в своем проекте. Синтаксис добавления пакетов зависит от выбранного инструмента. -
Загрузите пакет в пространство имен и получите доступ к его конкретным элементам с помощью операторов
using
иimport
. Вы также можете добавить и собственные пакеты. -
При необходимости узнайте статус пакета через
status
, проверьте, какие пакеты загружены в оперативную память Engee и удалите ненужные черезremove
илиrm
(синтаксис зависит от выбранного инструмента).
Подробная информация о работе с пакетами представлена ниже.
Пакеты Julia в командной строке
Чтобы установить новый пакет в командной строке Engee, кликните левой кнопкой мыши в области ввода кода и нажмите закрывающую квадратную скобку ]. Это переключит командную строку на работу с менеджером пакетов. Строка изменит свой вид с engee>
на pkg>
:
pkg>
В режиме менеджера пакетов используем команду add
для добавления пакета:
add Example
Вы можете добавить несколько пакетов одновременно, перечисляя их имена через запятую, например:
add Example, Plots, Pluto
Для удаления пакета используется команда remove
или ее сокращенная версия rm
:
remove Pluto
Вывод удаления пакета
Updating `/user/.project/Project.toml`
[c3e4b0f8] - Pluto v0.19.38
Updating `/user/.project/Manifest.toml`
[5218b696] - Configurations v0.17.6
[e2d170a0] - DataValueInterfaces v1.0.0
[21656369] - ExpressionExplorer v1.0.0
[55351af7] - ExproniconLite v0.10.5
[fb4132e2] - FuzzyCompletions v0.5.3
[ac1192a8] - HypertextLiteral v0.9.5
[82899510] - IteratorInterfaceExtensions v1.0.0
[0e77f7df] - LazilyInitializedFields v1.2.2
[6c6e2e6c] - MIMEs v0.1.4
[36869731] - Malt v1.1.1
[99f44e22] - MsgPack v1.2.0
[c3e4b0f8] - Pluto v0.19.38
[91cefc8d] - PrecompileSignatures v3.0.3
[aea7be01] - PrecompileTools v1.2.0
[2792f1a3] - RegistryInstances v0.1.0
[3783bdb8] - TableTraits v1.0.1
[bd369af6] - Tables v1.10.0
[410a4b4d] - Tricks v0.1.6
При необходимости вы можете удалить несколько пакетов за раз, перечисляя их имена через запятую:
remove Pluto, Plots, Example
Попытка удалить несуществующий пакет выдаст ошибку:
Вывод ошибки
The following package names could not be resolved:
* Имя пакета (not found in project or manifest)
Для выхода из режима менеджера пакетов pkg> кликните левой кнопкой мыши по области ввода кода и нажмите Backspace. Это вернет вас в первичный вид командной строки engee> .
|
Пакеты Julia в редакторе скриптов
Чтобы установить новый пакет в интерактивном скрипте Engee, в секции с кодом импортируйте Pkg командой import Pkg
, а затем выполните команду Pkg.add("Имя пакета")
. Например, секция с кодом для добавления пакета Example
будет выглядеть так:
import Pkg
Pkg.add("Example")
После нажатия кнопки Пуск на этой секции будет импортирован менеджер пакетов Pkg, и будет установлен пакет Example
. Информация о ходе установки пакета отобразится автоматически:
Resolving package versions...
Installed Example ─ v0.5.3
Updating `/user/start/Project.toml`
[7876af07] + Example v0.5.3
Updating `/user/start/Manifest.toml`
[7876af07] + Example v0.5.3
Как и в случае с командной строкой, вы можете добавить несколько пакетов одновременно, перечисляя их имена через запятую и добавляя квадратные скобки для создания массива строк, например:
Pkg.add(["Example", "Plots"])
Для удаления пакета используется команда rm
:
Pkg.rm("Example")
Для удаления нескольких пакетов одновременно используется перечисление имен через запятую и квадратные скобки:
Pkg.rm(["Example", "Plots"])
Команда remove
не определяется в редакторе скриптов, хотя и используется в командной строке. Попытка вызвать команду в редакторе выдаст ошибку:
`UndefVarError: `remove` not defined`
В редакторе скриптов имя менеджера пакетов Pkg и имена пакетов Julia чувствительны к регистру и должны начинаться с заглавной буквы, в противном случае вы получите сообщение об ошибке. |
Статус пакетов
Чтобы узнать, какие пакеты установлены и готовы к использованию, откройте командную строку и выполните следующие действия:
-
Войдите в менеджер пакетов Pkg через ].
-
Пропишите команду
status
:
pkg> status
После этого вы увидите список установленных пакетов и их версию:
Вывод статуса пакетов
pkg> status
Status `/user/.project/Project.toml`
⌅ [c3fe647b] AbstractAlgebra v0.27.8
⌅ [7d9f7c33] Accessors v0.1.27
⌅ [79e6a3ab] Adapt v3.5.0
⌅ [91a5bcdd] Plots v1.36.1
⌃ [c3e4b0f8] Pluto v0.19.36
Символы ⌃
и ⌅
означают, что для пакетов есть новые версии:
-
⌃
— имеется более новая версия. -
⌅
— имеется более новая версия, но есть конфликты по совместимости с другими пакетами.
Узнать, какие пакеты установлены и готовы к использованию, можно и через редактор скриптов:
-
Введите
import Pkg
, если не сделали этого ранее. -
Введите
Pkg.status()
для получения статуса пакетов.
Загрузка пакетов
В Julia для загрузки пакетов и предоставления доступа к их конкретным элементам, таким как функции, типы и переменные, используются операторы import
и using
:
-
using
— используется для загрузки всех экспортированных имен из модуля и привязки их к текущему пространству имен. Например:using Statistics x = mean([1, 2, 3, 4, 5])
-
import
— используется для выборочного импорта определенных функций или переменных из модуля. Требует указания имени модуля перед именем функции или переменной. Следовательно, функция или переменная, не импортированные явно, не будут доступны в текущей среде. Пример:import Statistics x = Statistics.mean([1, 2, 3, 4, 5])
Рассмотрим преимущества и ограничения операторов:
-
Преимущество
using
— удобство. Код становится более емким, все функции и переменные из модулей доступны в текущем пространстве имен. -
Недостаток
using
— использованиеusing
для загрузки больших модулей со множеством функций и переменных может повлиять на производительность и переполнение памяти. -
Недостаток
using
— конфликт имен.using
может вызвать конфликты имен, если несколько модулей определяют функции или переменные с одинаковым именем. -
Преимущество
import
— отсутствие конфликта имен. -
Преимущество
import
— сокращение времени компиляции, избегая необходимости компилировать ненужный код. -
Недостаток
import
— усложнение кода.
Таким образом, оператор using
больше подходит для небольших проектов с упором на удобство. Оператор import
больше подходит для крупных проектов с упором на избирательность и контролем над использованием памяти.