環境變數

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 中,環境變數可以透過手動執行來設定,例如在啟動 Julia 前執行 export JULIA_NUM_THREADS=4,或將相同的指令新增到 ~/.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 會在

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

搜尋 startup.jl 檔案(透過 Base.load_julia_startup())。

例如,一個 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 腳本中輕鬆附加、前置等載入路徑值,無論 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 歷程記錄檔的預設位置。

與 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 之前定義 JULIA_DEPOT_PATH;在 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 應使用其執行外部命令的殼層的絕對路徑 (透過 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 則設為 /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 的執行緒政策將與在專用機器上執行一致:主執行緒在處理程序 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_CPU_TARGET 的有效值可透過執行 julia -C help 取得。

在處理器類型或功能不同的異質運算系統中,設定 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

針對檔案或模組啟用除錯記錄,請參閱 記錄 以取得更多資訊。

JULIA_GC_ALLOC_POOL, JULIA_GC_ALLOC_OTHER, JULIA_GC_ALLOC_PRINT

如果已設定,這些環境變數會採用字串,這些字串可能會以字元 'r' 開頭,後面接著以冒號分隔的三個有號 64 位元整數 (int64_t) 清單的字串內插。這三個整數 a:b:c 代表等差數列 aa + ba + 2*b、... c

  • 如果 jl_gc_pool_alloc() 已呼叫第 n 次,且 n 屬於 $JULIA_GC_ALLOC_POOL 所代表的等差數列,則會強制進行垃圾回收。
  • 如果 maybe_collect() 已呼叫第 n 次,且 n 屬於 $JULIA_GC_ALLOC_OTHER 所表示的等差數列,則強制進行垃圾回收。
  • 如果 jl_gc_collect() 已呼叫第 n 次,且 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 分析支援編譯時有效,方法為使用

  • Intel 的 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 後端的引數。