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

Переменные среды

Julia можно настроить с помощью ряда переменных среды, задаваемых либо обычным способом для каждой операционной системы, либо переносимым способом в Julia. Если, к примеру, переменной среды JULIA_EDITOR нужно задать значение vim, можно ввести ENV["JULIA_EDITOR"] = "vim" (например, в REPL), чтобы вносить это изменение в каждом конкретном случае, или добавить то же самое в файл конфигурации пользователя ~/.julia/config/startup.jl в домашнем каталоге пользователя, чтобы добиться постоянного эффекта. Текущее значение той же переменной среды можно узнать, проверив ENV["JULIA_EDITOR"].

Переменные среды, используемые в Julia, как правило, начинаются с JULIA. Если InteractiveUtils.versioninfo вызывается с ключевым словом verbose=true, в выводе будут указаны все определенные переменные среды, подходящие для Julia, включая те, которые содержат JULIA в своих именах.

Рекомендуется избегать изменения переменных среды во время выполнения, например внутри ~/.julia/config/startup.jl.

Одна из причин заключается в том, что некоторые переменные языка Julia, такие как [JULIA_NUM_THREADS](environment-variables.md#JULIA_NUM_THREADS) и [JULIA_PROJECT](environment-variables.md#JULIA_PROJECT), должны быть заданы до запуска Julia.

Аналогично, функции __init__() пользовательских модулей в sysimage (через via PackageCompiler) следует выполнять перед startup.jl, поэтому задавать переменные среды в startup.jl может быть слишком поздно для пользовательского кода.

Кроме того, изменение переменных среды во время выполнения может привести к гонкам по данным в остальном безопасном коде.

В Bash переменные среды можно задать вручную, выполнив, например, команду export JULIA_NUM_THREADS=4 перед запуском Julia либо добавив ту же команду в ~/.bashrc или ~/.bash_profile для задания переменной при каждом запуске Bash.

Расположения файлов

JULIA_BINDIR

Абсолютный путь к каталогу, содержащему исполняемый файл Julia, который задает глобальную переменную Sys.BINDIR. Если переменная $JULIA_BINDIR не задана, Julia определяет значение Sys.BINDIR во время выполнения.

Сам исполняемый файл — один из

$JULIA_BINDIR/julia
$JULIA_BINDIR/julia-debug

по умолчанию.

Глобальная переменная Base.DATAROOTDIR определяет относительный путь от Sys.BINDIR к каталогу данных, связанному с Julia. Затем путь

$JULIA_BINDIR/$DATAROOTDIR/julia/base

определяет каталог, в котором Julia первоначально ищет исходные файлы (с помощью Base.find_source_file()).

Аналогичным образом глобальная переменная Base.SYSCONFDIR определяет относительный путь к каталогу файла конфигурации. Затем Julia ищет файл startup.jl в

$JULIA_BINDIR/$SYSCONFDIR/julia/startup.jl
$JULIA_BINDIR/../etc/julia/startup.jl

по умолчанию (с помощью Base.load_julia_startup()).

Например, в установке Linux с исполняемым файлом Julia, расположенным в /bin/julia, у переменной DATAROOTDIR для ../share и переменной SYSCONFDIR для ../etc JULIA_BINDIR будет иметь значение /bin, путь поиска файла исходного кода

/share/julia/base

и путь поиска глобальной конфигурации

/etc/julia/startup.jl

JULIA_PROJECT

Путь к каталогу, который указывает, какой проект должен быть первоначальным активным проектом. Задание этой переменной среды аналогично указанию параметра запуска --project, но --project имеет больший приоритет. Если переменной задано значение @. (обратите внимание на точку в конце), Julia пытается найти каталог проекта, содержащий файл Project.toml или JuliaProject.toml из текущего каталога и его родительских каталогов. См. также главу Загрузка кода.

JULIA_PROJECT следует определить до запуска Julia. Определять эту переменную в файле startup.jl в процессе запуска слишком поздно.

JULIA_LOAD_PATH

Переменная среды JULIA_LOAD_PATH используется для заполнения глобальной переменной Julia LOAD_PATH, которая определяет, какие пакеты можно загрузить посредством import и using (см. главу Загрузка кода).

В отличие от переменной PATH оболочки, пустые записи в JULIA_LOAD_PATH расширяются до значения по умолчанию LOAD_PATH ["@", "@v#.#", "@stdlib"] при заполнении LOAD_PATH. Это позволяет легко добавлять значение загрузки в конец или начало скриптов оболочки независимо от того, задана переменная JULIA_LOAD_PATH или еще нет. Например, чтобы добавить каталог /foo/bar в начало переменной LOAD_PATH, просто выполните

export JULIA_LOAD_PATH="/foo/bar:$JULIA_LOAD_PATH"

Если переменная среды JULIA_LOAD_PATH уже задана, в начало ее старого значения будет добавлено /foo/bar. С другой стороны, если переменная JULIA_LOAD_PATH не задана, ей будет присвоено значение /foo/bar:, что приведет к расширению значения LOAD_PATH до ["/foo/bar", "@", "@v#.#", "@stdlib"]. Если в качестве значения переменной JULIA_LOAD_PATH задана пустая строка, она расширяется до пустого массива LOAD_PATH. Другими словами, пустая строка интерпретируется как нульэлементный массив, а не как одноэлементный массив пустой строки. Такое поведение было выбрано для того, чтобы можно было задавать пустой путь загрузки с помощью переменной среды. Если вам нужен путь загрузки по умолчанию, либо отмените значение переменной среды, либо, если она должна иметь значение, задайте в его качестве строку :.

В Windows элементы пути разделяются символом ;, как и в большинстве списков путей в Windows. Замените : на ; в абзаце выше.

JULIA_DEPOT_PATH

Переменная среды JULIA_DEPOT_PATH используется для заполнения глобальной переменной Julia DEPOT_PATH, которая управляет тем, в каких местах диспетчер пакетов, а также механизмы загрузки кода Julia выполняют поиск реестров пакетов, установленных пакетов, именованных сред, клонов репозиториев, кэшированных скомпилированных образов пакетов, файлов конфигурации и расположения по умолчанию файла истории REPL.

В отличие от переменной PATH оболочки, но аналогично JULIA_LOAD_PATH, пустые записи в JULIA_DEPOT_PATH имеют особое поведение.

  • В конце она расширяется до значения по умолчанию DEPOT_PATH, исключая пользовательское хранилище.

  • В начале она расширяется до значения по умолчанию DEPOT_PATH, включая пользовательское хранилище. Это позволяет легко переопределять пользовательское хранилище, сохраняя при этом доступ к ресурсам, поставляемым вместе с Julia, таким как файлы кэша, артефакты и т. д. Например, чтобы переключить пользовательское хранилище на /foo/bar, используйте конечный символ :.

export JULIA_DEPOT_PATH="/foo/bar:"

Все операции с пакетами, такие как клонирование реестров или установка пакетов, теперь будут записываться в /foo/bar, но так как пустая запись расширяется до системного хранилища по умолчанию, любые связанные ресурсы будут по-прежнему доступны. Если вы действительно хотите использовать только хранилище по пути /foo/bar и не загружать ресурсы в составе Julia, просто задайте для переменной среды значение /foo/bar без двоеточия в конце.

Чтобы добавить хранилище в конец полного списка по умолчанию, включая пользовательское хранилище по умолчанию, используйте начальный символ :.

export JULIA_DEPOT_PATH=":/foo/bar"

Приведенное выше правило имеет два исключения. Первое — если в качестве значения переменной JULIA_DEPOT_PATH задана пустая строка, она расширяется до пустого массива DEPOT_PATH. Другими словами, пустая строка интерпретируется как нульэлементный массив, а не как одноэлементный массив пустой строки. Такое поведение было выбрано для того, чтобы можно было задавать пустой путь к хранилищу с помощью переменной среды.

Второе — если в JULIA_DEPOT_PATH не указано пользовательское хранилище, то пустая запись расширяется до хранилища по умолчанию, включая пользовательское хранилище. Это позволяет использовать хранилище по умолчанию, как если бы переменная среды не была задана, установив для нее в качестве значения строку :.

В Windows элементы пути разделяются символом ;, как и в большинстве списков путей в Windows. Замените : на ; в абзаце выше.

JULIA_DEPOT_PATH следует определить до запуска Julia. Определять эту переменную в файле startup.jl в процессе запуска слишком поздно. В данном случае можно вместо этого напрямую изменить массив DEPOT_PATH, который заполняется из переменной среды.

JULIA_HISTORY

Абсолютный путь REPL.find_hist_file() к файлу истории REPL. Если значение $JULIA_HISTORY не задано, REPL.find_hist_file() по умолчанию использует

$(DEPOT_PATH[1])/logs/repl_history.jl

JULIA_MAX_NUM_PRECOMPILE_FILES

Задает максимальное количество различных экземпляров одного пакета, которые будут храниться в кэше предварительной компиляции (по умолчанию — 10).

JULIA_VERBOSE_LINKING

Если задано значение true, во время предварительной компиляции будут выводиться команды компоновщика.

Pkg.jl

JULIA_CI

Заданное значение true указывает серверу пакетов, что любые операции с пакетами являются частью системы непрерывной интеграции (CI) для целей сбора статистики использования пакетов.

JULIA_NUM_PRECOMPILE_TASKS

Количество параллельных задач для использования при предварительной компиляции пакетов. См. описание Pkg.precompile.

JULIA_PKG_DEVDIR

Каталог по умолчанию, используемый Pkg.develop для скачивания пакетов.

JULIA_PKG_IGNORE_HASHES

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

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

Поддерживается в Julia 1.6 и более поздних версиях.

JULIA_PKG_OFFLINE

Если задано значение true, будет включен автономный режим: см. описание Pkg.offline.

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

Для автономного режима Pkg требуется Julia 1.5 или более поздняя версия.

JULIA_PKG_PRECOMPILE_AUTO

Если задано значение 0, будет отключена автоматическая предварительная компиляция, выполняемая действиями пакета, что приведет к изменению манифеста. См. описание Pkg.precompile.

JULIA_PKG_SERVER

Указывает URL-адрес используемого реестра пакетов. По умолчанию Pkg использует https://pkg.julialang.org для извлечения пакетов Julia. Кроме того, можно отключить использование протокола PkgServer и получать доступ к пакетам непосредственно с их узлов (GitHub, GitLab и т. д.), задав export JULIA_PKG_SERVER="".

JULIA_PKG_SERVER_REGISTRY_PREFERENCE

Указывает предпочтительный тип реестра. В настоящее время поддерживаются значения conservative (по умолчанию), что означает, что будут публиковаться только те ресурсы, которые были обработаны сервером хранилищ (и, таким образом, имеют более высокую вероятность доступа с PkgServers), в то время как eager будет публиковать реестры, ресурсы которых необязательно были обработаны серверами хранилищ. Пользователи, находящиеся за ограничительными брандмауэрами, которые не разрешают скачивание с произвольных серверов, не должны использовать тип eager.

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

Это касается только Julia 1.7 и более поздних версий.

JULIA_PKG_UNPACK_REGISTRY

Если задано значение true, реестр будет распакован, а не сохранен в виде сжатого архива Tarball.

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

Это касается только Julia 1.7 и более поздних версий. В более ранних версиях всегда выполняется распаковка реестра.

JULIA_PKG_USE_CLI_GIT

Если задано значение true, операции Pkg, использующие протокол git, будут работать с внешним исполняемым файлом git, а не с библиотекой libgit2 по умолчанию.

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

Использование исполняемого файла git поддерживается только в Julia 1.7 и более поздних версиях.

JULIA_PKGRESOLVE_ACCURACY

Точность сопоставителя пакетов. Это должно быть целое положительное число, по умолчанию используется 1.

JULIA_PKG_PRESERVE_TIERED_INSTALLED

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

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

Это касается только Julia 1.9 и более поздних версий.

Сетевой транспорт

JULIA_NO_VERIFY_HOSTS

JULIA_SSL_NO_VERIFY_HOSTS

JULIA_SSH_NO_VERIFY_HOSTS

JULIA_ALWAYS_VERIFY_HOSTS

Указывает узлы, удостоверения которых должны или не должны проверяться для определенных транспортных уровней. См. описание NetworkOptions.verify_host.

JULIA_SSL_CA_ROOTS_PATH

Указывает файл или каталог, содержащий корни центра сертификации. См. описание NetworkOptions.ca_roots

link:@id External-applications[Внешние приложения].

JULIA_SHELL

Абсолютный путь к оболочке, с помощью которой Julia должна выполнять внешние команды (посредством Base.repl_cmd()). По умолчанию используется переменная среды $SHELL, а если переменная $SHELL не задана, используется /bin/sh.

В Windows эта переменная среды игнорируется, и внешние команды выполняются напрямую.

JULIA_EDITOR

Редактор, возвращаемый InteractiveUtils.editor() и используемый, например, в методе InteractiveUtils.edit, ссылающемся на команду предпочтительного редактора, например vim.

$JULIA_EDITOR имеет приоритет над переменной $VISUAL, которая, в свою очередь, превалирует над $EDITOR. Если ни одна из этих переменных среды не задана, редактор считается open в Windows и OS X, или /etc/alternatives/editor, если он существует, или emacs в противном случае.

Чтобы использовать Visual Studio Code в Windows, задайте переменной $JULIA_EDITOR значение code.cmd.

Распараллеливание

JULIA_CPU_THREADS

Переопределяет глобальную переменную Base.Sys.CPU_THREADS, количество доступных логических ядер ЦП.

JULIA_WORKER_TIMEOUT

Тип Float64, который задает значение для Distributed.worker_timeout() (по умолчанию используется 60.0). Эта функция задает количество секунд, в течение которых рабочий процесс будет ждать, пока главный процесс установит соединение, прежде чем завершиться.

JULIA_NUM_THREADS

64-разрядное целое число без знака (uint64_t), задающее максимальное количество потоков, доступных для Julia. Если значение $JULIA_NUM_THREADS не является положительным или не задано, или если количество потоков ЦП не может быть определено с помощью системных вызовов, количество потоков устанавливается равным 1.

Если для $JULIA_NUM_THREADS задано значение auto, количество потоков будет установлено равным количеству потоков процессора.

JULIA_NUM_THREADS следует определить до запуска Julia. Определять эту переменную в файле startup.jl в процессе запуска слишком поздно.

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

В Julia 1.5 и более поздних версиях количество потоков также может быть задано при запуске с помощью аргумента командной строки -t (--threads).

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

Для установки значения auto для переменной $JULIA_NUM_THREADS требуется Julia 1.7 или более поздние версии.

JULIA_THREAD_SLEEP_THRESHOLD

Если задана строка, которая начинается с не зависящей от регистра подстроки "infinite", чередующиеся потоки никогда не переходят в спящий режим. В противном случае $JULIA_THREAD_SLEEP_THRESHOLD интерпретируется как 64-разрядное целое число без знака (uint64_t) и выделяет (в наносекундах) количество времени, по истечении которого чередующиеся потоки должны перейти в спящий режим.

JULIA_NUM_GC_THREADS

Задает количество потоков, используемых при сборке мусора. Если значение не указано, устанавливается половина числа рабочих потоков.

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

Переменная среды была добавлена в версии 1.10.

JULIA_IMAGE_THREADS

32-разрядное целое число без знака, задающее количество потоков, используемых при компиляции образа в этом процессе Julia. Значение этой переменной можно проигнорировать для модуля небольшого размера. Если значение не указано, вместо него используется меньшее из значений JULIA_CPU_THREADS или значение половины количества логических ядер процессора.

JULIA_IMAGE_TIMINGS

Логическое значение, определяющее, будет ли выводиться подробная информация о времени во время компиляции образа. Значение по умолчанию — 0.

JULIA_EXCLUSIVE

Если установлено значение, отличное от 0, политика потоков Julia согласована с выполнением потоков на выделенном компьютере: главный поток находится в подсистеме proc 0, а потоки группируются по схожести. В противном случае Julia передает управление политикой потоков операционной системе.

Форматирование REPL

Переменные среды, определяющие, каким образом вывод REPL должен быть отформатирован в терминале. Как правило, в качестве значений этих переменных должны быть заданы escape-последовательности ANSI. Julia предоставляет высокоуровневый интерфейс с большей частью того же функционала. См. раздел в главе Julia REPL.

JULIA_ERROR_COLOR

Форматирование Base.error_color() (по умолчанию: светло-красный цвет, "\033[91m"), применяемое к ошибкам в терминале.

JULIA_WARN_COLOR

Форматирование Base.warn_color() (по умолчанию: желтый цвет, "\033[93m"), применяемое к предупреждениям в терминале.

JULIA_INFO_COLOR

Форматирование Base.info_color() (по умолчанию: бирюзовый цвет, "\033[36m"), применяемое к информационным сообщениям в терминале.

JULIA_INPUT_COLOR

Форматирование Base.input_color() (по умолчанию: нормальное состояние, "\033[0m"), применяемое к входным данным в терминале.

JULIA_ANSWER_COLOR

Форматирование Base.answer_color() (по умолчанию: нормальное состояние, "\033[0m"), применяемое к выводу в терминале.

Сборка образа системы и пакета

JULIA_CPU_TARGET

Изменяет архитектуру целевого компьютера для (предварительной) компиляции образов системы и пакетов. JULIA_CPU_TARGET влияет только на генерирование образа машинного кода, выводимого в кэш диска. В отличие от --cpu-target или -C, параметра командной строки, она не влияет на JIT-генерирование кода в рамках сеанса Julia, где машинный код хранится только в памяти.

Допустимые значения для JULIA_CPU_TARGET можно получить, выполнив команду julia -C help.

Установка JULIA_CPU_TARGET имеет большое значение для гетерогенных вычислительных систем, в которых могут присутствовать процессоры разных типов и с разными характеристиками. Такое часто встречается в кластерах высокопроизводительных вычислений (HPC), поскольку узлы компонентов могут использовать разные процессоры.

Целевая строка процессора представляет собой список строк, разделенных ;. Каждая строка начинается с имени процессора или архитектуры, а затем следует необязательный список характеристик, разделенных ,. generic или пустое имя процессора означает базовый необходимый набор функций целевой архитектуры ISA, которая является, по крайней мере, архитектурой, с которой компилируется среда выполнения C/C++. Каждая строка интерпретируется с помощью LLVM.

Поддерживается несколько специальных вариантов.

  1. clone_all

    Используется для принудительного клонирования всех функций в sysimg в целевом объекте. При использовании отрицательной формы (т. е. -clone_all) отключает полное клонирование, которое включено по умолчанию для определенных целевых объектов.

  2. base([0-9]*)

    Задает индекс (на основе 0) базового целевого объекта. Базовый целевой объект — это целевой объект, являющийся основой текущего целевого объекта, т. е. функции, которые не клонируются, будут использовать версию в базовом целевом объекте. Этот вариант позволяет принудительно полностью клонировать базовый целевой объект (как если бы для него было указано clone_all), если он не является целевым объектом по умолчанию (0). Индекс может быть только меньше текущего индекса.

  3. opt_size

    Оптимизация по размеру с минимальным влиянием на производительность. Clang/GCC -Os.

  4. min_size

    Оптимизация только размера. Clang -Oz.

Отладка и профилирование

JULIA_DEBUG

Включает ведение журнала отладки для файла или модуля. Дополнительные сведения: Logging.

JULIA_PROFILE_PEEK_HEAP_SNAPSHOT

Включает сбор моментального снимка кучи во время выполнения с помощью механизма профилирования peek. См. раздел Активация в ходе выполнения.

JULIA_TIMING_SUBSYSTEMS

Позволяет включать или отключать зоны для конкретного запуска Julia. Например, при задании переменной значения +GC,-INFERENCE будут включены зоны GC и отключены зоны INFERENCE. См. раздел Динамическое включение и отключение зон.

JULIA_GC_ALLOC_POOL

JULIA_GC_ALLOC_OTHER

JULIA_GC_ALLOC_PRINT

Если эти переменные среды заданы, они принимают строки, которые необязательно могут начинаться с символа , за которым следует строковая интерполяция разделенного двоеточием списка из трех 64-разрядных целых чисел со знаком (int64_t). Эта тройка целых чисел a:b:c представляет собой арифметическую последовательность a, a + b, a + 2*b …​ c.

  • Если jl_gc_pool_alloc() вызывается в n-й раз и n принадлежит арифметической последовательности, представленной $JULIA_GC_ALLOC_POOL, принудительно запускается сборка мусора.

  • Если maybe_collect() вызывается в n-й раз и n принадлежит арифметической последовательности, представленной $JULIA_GC_ALLOC_OTHER, принудительно запускается сборка мусора.

  • Если jl_gc_collect() вызывается в n-й раз и n принадлежит арифметической последовательности, представленной $JULIA_GC_ALLOC_PRINT, выводятся значения количества вызовов jl_gc_pool_alloc() и maybe_collect().

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

Эти переменные среды работают только в том случае, если код Julia был скомпилирован с отладкой сборки мусора (то есть если WITH_GC_DEBUG_ENV имеет значение 1 в конфигурации сборки).

JULIA_GC_NO_GENERATIONAL

Если задано значение, отличное от 0, сборщик мусора Julia никогда не выполняет «быструю очистку» памяти.

Эта переменная среды работает только в том случае, если код Julia был скомпилирован с отладкой сборки мусора (то есть если WITH_GC_DEBUG_ENV имеет значение 1 в конфигурации сборки).

JULIA_GC_WAIT_FOR_DEBUGGER

Если задано значение, отличное от 0, сборщик мусора Julia будет ждать подключения отладчика вместо его прерывания при возникновении критической ошибки.

Эта переменная среды работает только в том случае, если код Julia был скомпилирован с отладкой сборки мусора (то есть если WITH_GC_DEBUG_ENV имеет значение 1 в конфигурации сборки).

ENABLE_JITPROFILING

Если задано значение, отличное от 0, компилятор создаст и зарегистрирует прослушивателя событий для JIT-профилирования.

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

  • Intel’s VTune™ Amplifier (USE_INTEL_JITEVENTS имеет значение 1 в конфигурации сборки), либо

  • OProfile (USE_OPROFILE_JITEVENTS имеет значение 1 в конфигурации сборки).

  • Perf (USE_PERF_JITEVENTS имеет значение 1 в конфигурации сборки). Эта интеграция включена по умолчанию.

ENABLE_GDBLISTENER

Если задано значение, отличное от 0, включает регистрацию GDB кода Julia в сборках выпусков. В отладочных сборках Julia регистрация всегда включена. Рекомендуется использовать с -g 2.

JULIA_LLVM_ARGS

Аргументы, передаваемые бэкенду LLVM.

JULIA_FALLBACK_REPL

Приводит к принудительному использованию резервного repl вместо REPL.jl.