Переменные окружения
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 и JULIA_PROJECT, должны быть установлены до запуска Julia.
Аналогично, функции пользовательских модулей в sysimage (через 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:, которое будет расширено до значения ["/foo/bar", "@", "@v#.#", "@stdlib"] массива. Если JULIA_LOAD_PATH установлена в пустую строку, она расширяется до пустого массива LOAD_PATH. Другими словами, пустая строка интерпретируется как массив нулевой длины, а не массив длины 1 с пустой строкой. Это поведение было выбрано, чтобы можно было установить пустой путь загрузки через переменную окружения. Если вам нужен путь загрузки по умолчанию, либо сбросьте переменную окружения, либо, если значение необходимо, установите её в строку :.
В 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. Другими словами, пустая строка интерпретируется как массив длиной ноль, а не массив длиной 1 с пустой строкой. Это поведение было выбрано, чтобы можно было установить пустой путь к каталогу репозитория через переменную окружения.
Во-вторых, если в 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 issue #2317.
Поддерживается только в Julia 1.6 и выше.
JULIA_PKG_OFFLINE
Если установлено значение true, это включит офлайн-режим: см. Pkg.offline.
Офлайн-режим 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_PKG_UNPACK_REGISTRY
Если установлено значение true, это распакует реестр вместо хранения его в виде сжатого архива tarball.
Это влияет только на Julia 1.7 и выше. Более ранние версии всегда будут распаковывать реестр.
JULIA_PKG_USE_CLI_GIT
Если установлено значение true, операции Pkg, использующие протокол git, будут использовать внешний git исполняемый файл вместо стандартной библиотеки libgit2.
Использование исполняемого файла git поддерживается только в Julia 1.7 и выше.
JULIA_PKGRESOLVE_ACCURACY
Точность решателя пакетов. Должно быть положительным целым числом, значение по умолчанию 1.
JULIA_PKG_PRESERVE_TIERED_INSTALLED
Измените стратегию установки пакетов по умолчанию на Pkg.PRESERVE_TIERED_INSTALLED, чтобы менеджер пакетов пытался установить версии пакетов, сохраняя при этом как можно больше уже установленных версий пакетов.
Это влияет только на 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
Внешние приложения
JULIA_SHELL
Абсолютный путь к оболочке, которую Julia должна использовать для выполнения внешних команд (через Base.repl_cmd()). По умолчанию используется переменная окружения $SHELL, и по умолчанию используется /bin/sh если $SHELL не задана.
В 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 не положительное или не задано, или если количество потоков CPU не может быть определено с помощью системных вызовов, то количество потоков устанавливается в 1.
Если $JULIA_NUM_THREADS установлено в значение auto, то количество потоков будет установлено в количество потоков CPU.
JULIA_NUM_THREADS должно быть определено до запуска julia; определение в startup.jl происходит слишком поздно в процессе запуска.
В Julia 1.5 и выше количество потоков также можно указать при запуске с помощью аргумента командной строки -t/--threads.
Значение auto для $JULIA_NUM_THREADS требует Julia 1.7 или выше.
JULIA_THREAD_SLEEP_THRESHOLD
Если установлено в строку, начинающуюся с подстроки (нечувствительной к регистру) "infinite", потоки ожидания не будут спать. В противном случае, $JULIA_THREAD_SLEEP_THRESHOLD интерпретируется как беззнаковое 64-битное целое число (uint64_t) и задаёт время в наносекундах, после которого потоки ожидания должны перейти в режим ожидания.
JULIA_NUM_GC_THREADS
Устанавливает количество потоков, используемых сборкой мусора. Если не указано, устанавливается в половину числа потоков-работников.
Переменная окружения была добавлена в 1.10
JULIA_IMAGE_THREADS
Беззнаковое 32-битное целое число, задающее количество потоков, используемых для компиляции изображений в этом процессе Julia. Значение этой переменной может быть проигнорировано, если модуль небольшой. Если не указано, используется меньшее из значений JULIA_CPU_THREADS или половины числа логических ядер процессора.
JULIA_IMAGE_TIMINGS
Логическое значение, определяющее, будет ли выводиться подробная информация о времени выполнения во время компиляции изображения. По умолчанию 0.
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_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.
Поддерживаются несколько специальных функций:
-
clone_allЭто принуждает целевую систему к клонированию всех функций в sysimg. При использовании в отрицательной форме (т. е.
-clone_all) это отключает полное клонирование, которое по умолчанию включено для некоторых целей. -
base([0-9]*)Это указывает (0-основанный) базовый индекс цели. Базовая цель — это цель, на основе которой построена текущая цель, т. е. функции, которые не клонируются, будут использовать версию в базовой цели. Этот параметр приводит к полному клонированию базовой цели (как если бы
clone_allбыл указан для неё), если она не является целевой по умолчанию (0). Индекс может быть только меньше текущего индекса. -
opt_sizeОптимизация по размеру с минимальным влиянием на производительность.
-Osот Clang/GCC. -
min_sizeОптимизация только по размеру.
-Ozот Clang.
Отладка и профилирование
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', то интервал между событиями сборки мусора случайным образом определяется.
Эти переменные среды действуют только в том случае, если 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, используя либо
ENABLE_GDBLISTENER
Если установлено значение, отличное от 0, регистрирует GDB-код Julia в релизных сборках. В отладочных сборках Julia это всегда включено. Рекомендуется использовать с -g 2.
JULIA_LLVM_ARGS
Аргументы, которые необходимо передать обратному концу LLVM.
JULIA_FALLBACK_REPL
Вынуждает использование резервного REPL вместо REPL.jl.
© 2009–2024 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.11/manual/environment-variables/