环境变量

Julia 可以通过许多环境变量进行配置,这些变量可以通过每个操作系统的常用方式设置,也可以通过 Julia 内部以可移植的方式设置。假设您想将环境变量 JULIA_EDITOR 设置为 vim,您可以输入 ENV["JULIA_EDITOR"] = "vim"(例如,在 REPL 中)来进行一次性更改,或者将其添加到用户配置文件 ~/.julia/config/startup.jl 中,以使更改永久生效。可以使用 ENV["JULIA_EDITOR"] 来确定相同环境变量的当前值。

Julia 使用的环境变量通常以 JULIA 开头。如果用关键字 verbose=true 调用 InteractiveUtils.versioninfo,则输出将列出与 Julia 相关的任何已定义的环境变量,包括名称中包含 JULIA 的变量。

注意

一些变量,例如 JULIA_NUM_THREADSJULIA_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 文件(通过 Base.load_julia_startup()):

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

例如,在 Linux 安装中,Julia 可执行文件位于 /bin/juliaDATAROOTDIR../shareSYSCONFDIR../etc,则 JULIA_BINDIR 将设置为 /bin,源文件搜索路径为:

/share/julia/base

,全局配置搜索路径为:

/etc/julia/startup.jl

JULIA_PROJECT

一个目录路径,指示哪个项目应该是最初的活动项目。设置此环境变量的效果与指定 --project 启动选项相同,但 --project 具有更高的优先级。如果该变量设置为 @.(注意尾随点),则 Julia 将尝试从当前目录及其父目录中找到包含 Project.tomlJuliaProject.toml 文件的项目目录。另请参见关于 代码加载 的章节。

注意

JULIA_PROJECT 必须在启动 julia 之前定义;在 startup.jl 中定义它为时已晚。

JULIA_LOAD_PATH

JULIA_LOAD_PATH 环境变量用于填充全局 Julia LOAD_PATH 变量,该变量决定哪些包可以通过 importusing 加载(参见 代码加载)。

与 shell PATH 变量不同,JULIA_LOAD_PATH 中的空条目在填充 LOAD_PATH 时将扩展为 LOAD_PATH 的默认值 ["@", "@v#.#", "@stdlib"]。这允许在 shell 脚本中轻松追加、预置等 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。如果 JULIA_LOAD_PATH 设置为空字符串,它将扩展为空 LOAD_PATH 数组。换句话说,空字符串被解释为零元素数组,而不是一个元素数组的空字符串。这种行为是为了能够通过环境变量设置空加载路径。如果您想要默认加载路径,请取消设置环境变量,或者如果它必须具有值,请将其设置为字符串 :

注意

在 Windows 上,路径元素以 ; 字符分隔,与 Windows 上大多数路径列表的情况相同。在上述段落中,将 : 替换为 ;

JULIA_DEPOT_PATH

JULIA_DEPOT_PATH 环境变量用于填充全局 Julia DEPOT_PATH 变量,它控制包管理器以及 Julia 的代码加载机制在何处查找包注册表、已安装的包、命名环境、仓库克隆、缓存的已编译包镜像、配置文件以及 REPL 历史记录文件的默认位置。

与 shell PATH 变量不同,但类似于 JULIA_LOAD_PATHJULIA_DEPOT_PATH 中的空条目将扩展为 DEPOT_PATH 的默认值。这允许在 shell 脚本中轻松追加、预置等存储库路径值,而不管 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 历史文件的绝对路径 REPL.find_hist_file()。如果未设置 $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,则使用 git 协议的 Pkg 操作将使用外部 git 可执行文件,而不是默认的 libgit2 库。

Julia 1.7

仅在 Julia 1.7 及更高版本上支持使用 git 可执行文件。

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

外部应用程序

JULIA_SHELL

Julia 应该使用该 Shell 执行外部命令(通过 Base.repl_cmd())的绝对路径。默认值为环境变量 $SHELL,如果 $SHELL 未设置,则回退到 /bin/sh

注意

在 Windows 上,此环境变量将被忽略,外部命令将直接执行。

JULIA_EDITOR

InteractiveUtils.editor() 返回的编辑器,并在例如 InteractiveUtils.edit 中使用,引用首选编辑器的命令,例如 vim

$JULIA_EDITOR 优先于 $VISUAL$VISUAL 优先于 $EDITOR。如果未设置这些环境变量,则编辑器将被视为 Windows 和 OS X 上的 open,或如果存在则为 /etc/alternatives/editor,否则为 emacs

要在 Windows 上使用 Visual Studio Code,请将 $JULIA_EDITOR 设置为 code.cmd

并行化

JULIA_CPU_THREADS

覆盖全局变量 Base.Sys.CPU_THREADS,即可用逻辑 CPU 内核的数量。

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

在 Julia 1.5 及更高版本中,还可以使用 -t/--threads 命令行参数在启动时指定线程数。

Julia 1.7

$JULIA_NUM_THREADSauto 值需要 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 的值或逻辑 CPU 内核数的一半中较小的值代替。

JULIA_IMAGE_TIMINGS

一个布尔值,用于确定在图像编译期间是否打印详细的计时信息。默认值为 0。

JULIA_EXCLUSIVE

如果设置为除 0 以外的任何值,则 Julia 的线程策略与在专用机器上运行一致:主线程位于 proc 0,并且线程被绑定。否则,Julia 会让操作系统处理线程策略。

REPL 格式化

确定 REPL 输出如何在终端格式化的环境变量。 通常,这些变量应设置为 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 命令行选项 不同,它不会影响 Julia 会话中机器码仅存储在内存中的即时 (JIT) 代码生成。

可以通过执行 julia -C help 获取 JULIA_CPU_TARGET 的有效值。

对于异构计算系统,在其中可能存在不同类型或功能的处理器,设置 JULIA_CPU_TARGET 非常重要。 这在高性能计算 (HPC) 集群中很常见,因为组件节点可能使用不同的处理器。

CPU 目标字符串是由 ; 分隔的字符串列表,每个字符串以 CPU 或架构名称开头,后跟可选的功能列表,由 , 分隔。 generic 或空的 CPU 名称表示目标 ISA 的基本必需功能集,该功能集至少是 C/C++ 运行时编译的架构。 每个字符串都由 LLVM 解释。

支持一些特殊功能

  1. clone_all

    这强制目标在 sysimg 中拥有所有克隆函数。 当以否定形式使用时(即 -clone_all),这将禁用默认情况下对某些目标启用的完整克隆。

  2. base([0-9]*)

    这指定了 (0 为基准) 基准目标索引。 基准目标是当前目标所基于的目标,即未被克隆的函数将使用基准目标中的版本。 如果它不是默认目标 (0),此选项会导致基准目标完全克隆(就像为其指定了 clone_all 一样)。 索引只能小于当前索引。

  3. opt_size

    优化大小,对性能影响最小。 Clang/GCC 的 -Os

  4. min_size

    仅优化大小。 Clang 的 -Oz

调试和分析

JULIA_DEBUG

为文件或模块启用调试日志记录,有关更多信息,请参见 Logging

JULIA_GC_ALLOC_POOL, JULIA_GC_ALLOC_OTHER, JULIA_GC_ALLOC_PRINT

如果设置,这些环境变量将采用可选地以字符 'r' 开头的字符串,后跟以冒号分隔的三个有符号 64 位整数 (int64_t) 列表的字符串插值。 这三个整数 a:b:c 表示算术序列 aa + ba + 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 后端的参数。