環境変数

Julia の設定は様々な環境変数を通して変更できます。環境変数の設定は OS ごとの通常の方法もしくは Julia が提供するポータブルな方法を使って行います。例えば環境変数 JULIA_EDITORvim にしたいなら、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 実行形式を含むディレクトリの完全パスを表します。Julia のグローバル変数 Sys.BINDIR はこの値で初期化されます。$JULIA_BINDIR が設定されていなければ、Julia が実行時に調べて設定します。

デフォルトの実行形式は次のいずれかです:

$JULIA_BINDIR/julia
$JULIA_BINDIR/julia-debug

グローバル変数 Base.DATAROOTDIRSys.BINDIR から Julia に関連するデータを収めたディレクトリまでの相対パスを保持します。このため Julia が (Base.find_source_file() で) ソースファイルを探索するときは

$JULIA_BINDIR/$DATAROOTDIR/julia/base

というパスから探索が始まります。

同様に、グローバル変数 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../shareSYSCONFDIR../etc だとします。このとき、ソースファイルの探索パスは

/share/julia/base

となり、グローバル設定の探索パスは

/etc/julia/startup.jl

となります。

JULIA_PROJECT

Julia の開始時にアクティブになるプロジェクトのディレクトリパスです。この環境変数を設定するのはコマンドライン引数の --project を使って Julia を起動するのと同じですが、両方指定されると --project が優先されます。この環境変数が @. に設定されると、Julia は Project.toml または JuliaProject.toml を含むプロジェクトディレクトリを現在のディレクトリから上に向かいながら探索します。コードの読み込みの章も参照してください。

情報

JULIA_PROJECT は Julia の起動前に設定が必要です: startup.jlJULIA_PROJECT を設定してもスタートアップ処理に間に合いません。

JULIA_LOAD_PATH

環境変数 JULIA_LOAD_PATH は Julia のグローバル変数 LOAD_PATH の初期化で利用されます。LOAD_PATHimportusing でインポートできるパッケージがどれかを指定するグローバル変数です (参照: コードの読み込み)。

シェルの変数 PATH とは異なり、JULIA_LOAD_PATH に含まれる空のエントリは ["@", "@v#.#", "@stdlib"] というデフォルトの LOAD_PATH に展開されます。こうなっているのは、シェルスクリプトなどを使った JULIA_PATH の変更を JULIA_LOAD_PATH の値や定義の有無を気にせずに行うためです。例えばディレクトリ /foo/barLOAT_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 へ展開されます。言い換えると、空の文字列はゼロ要素の配列と解釈され、空文字列からなる一要素の配列とは解釈されません。この振る舞いをする理由は環境変数を使って空の LOAD_PATH を設定できるようにするためです。もしデフォルトの LOAD_PATH が必要なら、環境変数を定義しないでおくか、もし定義が必要なら文字列 : としてください。

JULIA_DEPOT_PATH

環境変数 JULIA_DEPOT_PATH は Julia のグローバル変数 DEPOT_PATH の初期化に使われます。DEPOT_PATH はパッケージマネージャと Julia のコード読み込み機構が次の情報を探索するパスを定めます:

JULIA_LOAD_PATH と同様に (そして PATH とは異なり)、JULIA_DEPOT_PATH の空のエントリは DEPOT_PATH デフォルトの値に展開されます。これによりシェルスクリプトを使った DEPOT_PATH の設定が JULIA_DEPOT_PATH の値や定義の有無に関わらず簡単に行えます。例えば DEPOT_PATH/foo/bar を追加するには、次のコマンドだけで済みます:

export JULIA_DEPOT_PATH="/foo/bar:$JULIA_DEPOT_PATH"

もし環境変数 JULIA_DEPOT_PATH が既に定義されていれば、古い値が /foo/bar の後に続きます。一方で定義されていなければ JULIA_DEPOT_PATH/foo/bar: と定義され、これはデフォルトの DEPOT_PATH の先頭に /foo/bar を付けるのと同じ効果を持ちます。

JULIA_DEPOT_PATH が空文字列だと、空の DEPOT_PATH に展開されます。言い換えると、空文字列はゼロ要素の配列と解釈され、空文字列からなる一要素の配列とは解釈されません。この振る舞いをする理由は環境変数を使って空の DEPOT_PATH を設定できるようにするためです。もしデフォルトの DEPOT_PATH が必要なら、環境変数を定義しないでおくか、もし定義が必要なら文字列 : としてください。

JULIA_HISTORY

REPL の履歴ファイルの完全パス (REPL.find_hist_file() の返す値) です。$JULIA_HISTORY が設定されていないと、REPL.find_hist_file() は次のデフォルト値に設定されます:

$(DEPOT_PATH[1])/logs/repl_history.jl

外部アプリケーションに関する環境変数

JULIA_SHELL

Julia が外部コマンドを (Base.repl_cmd() で) 実行するときに使うシェルの完全パスです。デフォルトは環境変数 $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 が使われます。

並列性に関する環境変数

JULIA_CPU_THREADS

環境変数 JULIA_CPU_THREADS の値はグローバル変数 Base.Sys.CPU_THREADS を上書きします。利用可能な論理 CPU コアを表します。

JULIA_WORKER_TIMEOUT

Distributed.worker_timeout() 関数の返り値を設定します。JULIA_WORKER_TIMEOUT の値は Float64 を表す文字列である必要があり、デフォルトは 60.0 です。この関数の返り値はワーカープロセスが接続を確立するときにマスタープロセスを待機する秒数であり、接続を確立できずにこの秒数が経過するとワーカーは停止します。

JULIA_NUM_THREADS

Julia が利用できるスレッド数の最大値を設定する符号無し 64 ビット整数 (uint64_t) を表す文字列です。$JULIA_NUM_THREADS が物理 CPU コア数より大きいと、スレッド数は物理 CPU コア数に設定されます。$JULIA_NUM_THREADS が正でない場合および設定されていない場合、あるいは CPU コア数をシステムコールで取得できなかった場合には、スレッド数は 1 に設定されます。

情報

JULIA_NUM_THREADS は Julia を開始する前に設定する必要があります。JULIA_NUM_THREADSstartup.jl で設定してもスタートアップ処理に間に合いません。

Julia 1.5

Julia 1.5 以降では起動時にコマンドライン引数 -t/--threads を使ってスレッド数を設定することもできます。

JULIA_THREAD_SLEEP_THRESHOLD

この値が文字列 "infinite" (全て小文字) で始まるなら、spinning を行うスレッドが眠らなくなります。そうでなければ $JULIA_THREAD_SLEEP_THRESHOLD は符号無し 64 ビット整数 (uint64_t) として解釈され、spinning を行うスレッドが眠る時間を表します1 (単位はナノ秒)。

JULIA_EXCLUSIVE

0 でない値が設定されると、Julia が専用のマシンで実行されるようなスレッドポリシーが設定されます: マスタースレッドは proc 0 で実行され、全てのスレッドが affinitize されます2

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_STACKFRAME_LINEINFO_COLOR

Base.stackframe_lineinfo_color() の返り値です。端末に表示されるスタックトレース中の行番号情報のフォーマットを表します。太字 ("\033[1m") がデフォルトです。

JULIA_STACKFRAME_FUNCTION_COLOR

Base.stackframe_function_color() の返り値です。端末に表示されるスタックトレース中の関数呼び出しのフォーマットを表します。太字 ("\033[1m") がデフォルトです。

デバッグとプロファイルに関する環境変数

JULIA_DEBUG

ファイルあるいはモジュールのデバッグログを有効にします。詳細は標準ライブラリの Logging モジュールを参照してください。

JULIA_GC_ALLOC_POOL, JULIA_GC_ALLOC_OTHER, JULIA_GC_ALLOC_PRINT

これらの環境変数が設定されるなら、その値はコロンで区切られた三つの符号付き 64 ビット整数 (int64_t)、またはその先頭に 'r' を付けたものである必要があります。a:b:c という形の三つの整数は a, a + b, a + 2*b, ..., c という算術級数を表します。

これらの環境変数の値が 'r' で始まるなら、対応するガベージコレクションイベントに反応する間隔がランダム化されます3

情報

これらの環境変数はガベージコレクションのデバッグ機能を有効にして Julia がコンパイルされたときにだけ効果を持ちます。つまりビルド設定の WITH_GC_DEBUG_ENV1 でなければ使えません。

JULIA_GC_NO_GENERATIONAL

0 でない値に設定すると、Julia のガベージコレクタがメモリの「クイックスイープ (quick sweep)」を行わなくなります。

情報

この環境変数はガベージコレクションのデバッグ機能を有効にして Julia がコンパイルされたときにだけ効果を持ちます。つまりビルド設定の WITH_GC_DEBUG_ENV1 でなければ使えません。

JULIA_GC_WAIT_FOR_DEBUGGER

0 でない値に設定すると、Julia のガベージコレクタは致命的なエラーが起きたときにデバッガのアタッチを待つようになります。

情報

この環境変数はガベージコレクションのデバッグ機能を有効にして Julia がコンパイルされたときにだけ効果を持ちます。つまりビルド設定の WITH_GC_DEBUG_ENV1 でなければ使えません。

ENABLE_JITPROFILING

0 でない値に設定すると、コンパイラは just-in-time (JIT) プロファイリング用のイベントリスナーを作成・登録します。

情報

この環境変数は JIT プロファイリングのサポートを有効にして Julia がコンパイルされたときにだけ効果を持ちます。つまり、次のいずれかが必要です:

  • Intel の VTune™ Amplifier (ビルド設定で USE_INTEL_JITEVENTS1 にする)
  • OProfile (ビルド設定で USE_OPROFILE_JITEVENTS1 にする)

JULIA_LLVM_ARGS

LLVM バックエンドに渡される引数です。


  1. 訳注: 現在この環境変数は使われていない (参照: コミット d9d8d)。[return]

  2. 訳注: 「スレッドを affinize する」とは、スレッドのアフィニティ (affinity) を設定して、OS がスレッドをコア間で移動させないようにすること。こうするとキャッシュがクリアされにくくなるので性能が向上するが、Julia 以外のプロセスが影響を受ける可能性がある。[return]

  3. 訳注: 完全にランダム化されるのではなく、平均して b 回に一度イベントに反応するよう間隔がランダムに変化する (参照: ソースコード)。[return]

日本語 Julia 書籍 (Amazon アソシエイト)
1 から始める Julia プログラミング
Julia プログラミングクックブック―言語仕様からデータ分析、機械学習、数値計算まで
スタンフォード ベクトル・行列からはじめる最適化数学