Переменные среды
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_NUM_THREADS и JULIA_PROJECT, должны быть установлены до запуска Julia, поэтому добавление этих переменных в ~/.julia/config/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. Другими словами, пустая строка интерпретируется как массив нулевой длины, а не массив единичной длины с пустой строкой. Такое поведение выбрано для возможности установки пустого пути загрузки через переменную среды. Если вам нужен путь загрузки по умолчанию, снимите установку переменной среды или, если значение должно быть задано, установите его в строку :.
JULIA_DEPOT_PATH
Переменная среды JULIA_DEPOT_PATH используется для заполнения глобальной переменной Julia DEPOT_PATH, которая управляет тем, где менеджер пакетов, а также механизмы загрузки кода Julia ищут реестры пакетов, установленные пакеты, именованные среды, клоны репозиториев, кэшированные скомпилированные образы пакетов, файлы конфигурации и местоположение файла истории REPL по умолчанию.
В отличие от переменной оболочки PATH, но аналогично JULIA_LOAD_PATH, пустые элементы в JULIA_DEPOT_PATH расширяются до значения по умолчанию DEPOT_PATH. Это позволяет легко добавлять, вставлять и т. д. значение пути репозитория в сценарии оболочки независимо от того, установлено ли JULIA_DEPOT_PATH или нет. Например, чтобы добавить каталог /foo/bar в начало DEPOT_PATH достаточно сделать
export JULIA_DEPOT_PATH="/foo/bar:$JULIA_DEPOT_PATH"
Если переменная среды JULIA_DEPOT_PATH уже установлена, её старое значение будет добавлено в начало с помощью /foo/bar. С другой стороны, если JULIA_DEPOT_PATH не установлена, то она будет установлена в /foo/bar:, что приведет к добавлению /foo/bar к пути репозитория по умолчанию. Если JULIA_DEPOT_PATH установлена в пустую строку, она расширяется до пустого массива DEPOT_PATH. Другими словами, пустая строка интерпретируется как массив нулевой длины, а не массив единичной длины с пустой строкой. Такое поведение выбрано для возможности установки пустого пути репозитория через переменную среды. Если вам нужен путь репозитория по умолчанию, снимите установку переменной среды или, если значение должно быть задано, установите его в строку :.
JULIA_HISTORY
Абсолютный путь REPL.find_hist_file() к файлу истории REPL. Если $JULIA_HISTORY не установлена, то REPL.find_hist_file() по умолчанию равен
$(DEPOT_PATH[1])/logs/repl_history.jl
JULIA_PKGRESOLVE_ACCURACY
Положительное значение Int, которое определяет, сколько времени подпрограмма max-sum MaxSum.maxsum() решателя зависимостей пакетов будет тратить на попытку удовлетворения ограничений, прежде чем сдаться: это значение по умолчанию 1, и большие значения соответствуют большему времени.
Предположим, что значение $JULIA_PKGRESOLVE_ACCURACY равно n. Тогда
- число итераций до децимации равно
20*n, - число итераций между шагами децимации равно
10*n, и - на шагах децимации максимум один из каждых
20*nпакетов подвергается децимации.
Внешние приложения
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 в противном случае.
Параллелизация
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 превышает количество доступных физических ядер процессора, количество потоков устанавливается в количество ядер. Если $JULIA_NUM_THREADS не является положительным или не установлено, или количество ядер процессора не может быть определено через системные вызовы, то количество потоков устанавливается в 1.
JULIA_NUM_THREADS должен быть определён перед запуском Julia; определение его в startup.jl происходит слишком поздно на этапе запуска.
JULIA_THREAD_SLEEP_THRESHOLD
Если задано строковое значение, начинающееся с подстроки "infinite" (регистронезависимо), то нити, работающие в цикле, никогда не будут приостанавливаться. В противном случае, $JULIA_THREAD_SLEEP_THRESHOLD интерпретируется как целое 64-битное беззнаковое число (uint64_t) и задаёт, в наносекундах, время, по истечении которого нити, работающие в цикле, должны приостановиться.
JULIA_EXCLUSIVE
Если задано значение, отличное от 0, политика управления потоками Julia соответствует работе на выделенном компьютере: главный поток находится на процессоре 0, и потоки привязаны к процессорам. В противном случае, Julia позволяет операционной системе управлять политикой потоков.
Форматирование REPL
Переменные среды, определяющие, как выходные данные REPL должны быть отформатированы на терминале. Как правило, эти переменные должны быть установлены на ANSI последовательности управляющих символов терминала. Julia предоставляет высокоуровневый интерфейс с большей частью той же функциональности; см. раздел о The 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_STACKFRAME_LINEINFO_COLOR
Форматирование Base.stackframe_lineinfo_color() (по умолчанию: жирный, "\033[1m") которое должна иметь информация о строках во время отладки стека на терминале.
JULIA_STACKFRAME_FUNCTION_COLOR
Форматирование Base.stackframe_function_color() (по умолчанию: жирный, "\033[1m") которое должны иметь вызовы функций во время отладки стека на терминале.
Отладка и профилирование
JULIA_GC_ALLOC_POOL, JULIA_GC_ALLOC_OTHER, JULIA_GC_ALLOC_PRINT
Если задано, эти переменные среды принимают строки, которые необязательно начинаются с символа 'r', за которым следует интерполяция строки с двоеточием-разделенным списком из трёх целых 64-битных чисел со знаком (int64_t). Эта тройка чисел a:b:c представляет арифметическую прогрессию a, a + b, a + 2*b, ... c.
- Если это
n-й вызовjl_gc_pool_alloc()иnпринадлежит арифметической прогрессии, представленной$JULIA_GC_ALLOC_POOL, то сборка мусора принудительно выполняется. - Если это
n-й вызовmaybe_collect()иnпринадлежит арифметической прогрессии, представленной$JULIA_GC_ALLOC_OTHER, то сборка мусора принудительно выполняется. - Если это
n-й вызовjl_gc_collect()иnпринадлежит арифметической прогрессии, представленной$JULIA_GC_ALLOC_PRINT, то выводятся счётчики вызововjl_gc_pool_alloc()иmaybe_collect().
Если значение переменной среды начинается с символа 'r', то интервал между событиями сбора мусора случайным образом определяется.
Эти переменные среды действуют только в том случае, если 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, компилятор создаст и зарегистрирует обработчик событий для профилирования «just-in-time» (JIT).
Эта переменная среды действует только в том случае, если Julia была скомпилирована с поддержкой JIT-профилирования, используя:
- Интеллектуальный VTune™ Amplifier (
USE_INTEL_JITEVENTSустановлено на1в конфигурации сборки), или -
OProfile (
USE_OPROFILE_JITEVENTSустановлено на1в конфигурации сборки).
JULIA_LLVM_ARGS
Аргументы, которые должны быть переданы в LLVM-бекенд.
© 2009–2020 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.4.2/manual/environment-variables/