Environment Variables

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 в своих именах.

Note

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

Одна из причин заключается в том, что некоторые переменные языка Julia, такие как JULIA_NUM_THREADS и JULIA_PROJECT, должны быть установлены до начала работы Julia.

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

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

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

File locations

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 из текущей директории и её родительских директорий. См. также главу о Code Loading.

Note

JULIA_PROJECT должен быть определен перед началом julia; определение его в startup.jl слишком поздно в процессе запуска.

JULIA_LOAD_PATH

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

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

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

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

Note

На 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 и не загружать никакие встроенные ресурсы, просто установите переменную окружения в /foo/bar без завершающего двоеточия.

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

export JULIA_DEPOT_PATH=":/foo/bar"

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

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

Note

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

Note

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 issue #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 и выше.

Network transport

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

External applications

JULIA_SHELL

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

Note

В 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.

Parallelization

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, то количество потоков будет установлено равным количеству потоков ЦП.

Note

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 соответствует работе на выделенной машине: главный поток находится на процессоре 0, и потоки имеют привязку. В противном случае Julia позволяет операционной системе управлять политикой потоков.

REPL formatting

Переменные окружения, которые определяют, как вывод REPL должен форматироваться в терминале. Обычно эти переменные должны быть установлены в ANSI terminal escape sequences. 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() (по умолчанию: normal, "\033[0m"), которое ввод должен иметь в терминале.

JULIA_ANSWER_COLOR

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

System and Package Image Building

JULIA_CPU_TARGET

Измените целевую архитектуру машины для (пред)компиляции system и package images. JULIA_CPU_TARGET влияет только на генерацию образа машинного кода, который выводится в кэш на диске. В отличие от --cpu-target или -C, command line option, он не влияет на генерацию кода в режиме just-in-time (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]*)

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

  3. opt_size

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

  4. min_size

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

Debugging and profiling

JULIA_DEBUG

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

JULIA_PROFILE_PEEK_HEAP_SNAPSHOT

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

JULIA_TIMING_SUBSYSTEMS

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

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', то интервал между событиями сборки мусора рандомизирован.

Note

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

JULIA_GC_NO_GENERATIONAL

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

Note

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

JULIA_GC_WAIT_FOR_DEBUGGER

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

Note

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

ENABLE_JITPROFILING

Если установлено на любое значение, кроме 0, то компилятор создаст и зарегистрирует слушатель событий для профилирования в режиме just-in-time (JIT).

Note

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

  • Intel's VTune™ Amplifier (USE_INTEL_JITEVENTS установлено в 1 в конфигурации сборки), или
  • OProfile (USE_OPROFILE_JITEVENTS установлено в 1 в конфигурации сборки).
  • Perf (USE_PERF_JITEVENTS установлено в 1 в конфигурации сборки). Эта интеграция включена по умолчанию.

ENABLE_GDBLISTENER

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

JULIA_LLVM_ARGS

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

JULIA_FALLBACK_REPL

Принуждает использовать резервный REPL вместо REPL.jl.