环境变量
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_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
文件(通过 Base.load_julia_startup()
):
$JULIA_BINDIR/$SYSCONFDIR/julia/startup.jl
$JULIA_BINDIR/../etc/julia/startup.jl
。
例如,在 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
加载(参见 代码加载)。
与 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_PATH
,JULIA_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_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
,则使用 git 协议的 Pkg 操作将使用外部 git
可执行文件,而不是默认的 libgit2 库。
仅在 Julia 1.7 及更高版本上支持使用 git
可执行文件。
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 应该使用该 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 及更高版本中,还可以使用 -t
/--threads
命令行参数在启动时指定线程数。
$JULIA_NUM_THREADS
的 auto
值需要 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
的值或逻辑 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 解释。
支持一些特殊功能
clone_all
这强制目标在 sysimg 中拥有所有克隆函数。 当以否定形式使用时(即
-clone_all
),这将禁用默认情况下对某些目标启用的完整克隆。base([0-9]*)
这指定了 (0 为基准) 基准目标索引。 基准目标是当前目标所基于的目标,即未被克隆的函数将使用基准目标中的版本。 如果它不是默认目标 (0),此选项会导致基准目标完全克隆(就像为其指定了
clone_all
一样)。 索引只能小于当前索引。opt_size
优化大小,对性能影响最小。 Clang/GCC 的
-Os
。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
表示算术序列 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 后端的参数。