Переменные среды
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. Другими словами, пустая строка интерпретируется как массив нулевой длины, а не как массив из одного элемента пустой строки. Это поведение было выбрано для того, чтобы было возможно установить пустой путь загрузки через переменную среды. Если вам нужен путь загрузки по умолчанию, снимите установку переменной среды или, если ей должно быть присвоено значение, установите значение :.
В Windows элементы пути разделяются символом ;, как это происходит в большинстве списков путей в Windows. Замените : на ; в приведенном выше абзаце.
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. Другими словами, пустая строка интерпретируется как массив нулевой длины, а не как массив из одного элемента пустой строки. Это поведение было выбрано для того, чтобы было возможно установить пустой путь хранилища пакетов через переменную среды. Если вам нужен путь хранилища пакетов по умолчанию, снимите установку переменной среды или, если ей должно быть присвоено значение, установите значение :.
В 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, это проигнорирует неверные хэши в артефактах. Это следует использовать с осторожностью, так как это отключает проверку загружаемых файлов, но может решить проблемы при перемещении файлов между разными типами файловых систем. См. вопрос #2317 на GitHub проекта Pkg.jl для получения дополнительной информации.
Это поддерживается только в 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, это позволит распаковать реестр вместо хранения его в виде сжатого tar-архива.
Это касается только 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 не положительно или не установлено, или количество потоков процессора нельзя определить с помощью системных вызовов, то количество потоков устанавливается в 1.
Если $JULIA_NUM_THREADS установлено в значение auto, то количество потоков будет установлено в количество ядер процессора.
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 escape-кодов. 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]*)Это определяет базовый индекс целевого объекта (с нулевым индексом). Базовая цель — это цель, на которой основана текущая цель, т. е. функции, которые не клонируются, будут использовать версию в базовой цели. Этот параметр заставляет базовая цель полностью клонироваться (как если бы
clone_allбыл указан для неё), если она не является целевой по умолчанию (0). Индекс может быть только меньше текущего индекса. -
opt_sizeОптимизация под размер с минимальным влиянием на производительность.
-OsClang/GCC. -
min_sizeОптимизация только под размер.
-OzClang.
Отладка и профилирование
JULIA_DEBUG
Включить регистрирование отладки для файла или модуля, см. Logging для получения дополнительной информации.
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, используя либо
- Интеллектуальный 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.
© 2009–2024 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.10/manual/environment-variables/