常常開發者會需要在,使用者使用不同的語言版本或是套件版本,做不同的處置,有可能是安裝不同的函式庫,或是設定不同的參數。這時候要在程式中自動取得目前的語言版本或是特定套件的版本就很重要。Julia 語言本身就有內建版本字串可以使用,它可以用來比較版本的差異或是大小。

Julia 語言版本

如果要取得目前 Julia 語言版本相當地簡單,有個全域變數 VERSION,它直接提供給你目前的語言版本資訊。

1
2
3
4
5
julia> VERSION
v"1.6.0"

julia> VERSIONv"1.5.0"
true

套件版本

目前官方並沒有提供一個方便查詢套件版本的方式給大家。像 python 有 __version__ 可以使用。

1
2
3
>>> import numpy
>>> numpy.__version__
'1.20.0'

目前在 Julia 不依賴套件的方法是到 Pkg.dependencies() 去找尋,他會回傳給你目前所有套件的相依樹(dependency tree),key 是每個套件的 UUID,而 value 則是其相依的套件資訊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
julia> Pkg.dependencies()
Dict{Base.UUID, Pkg.Types.PackageInfo} with 584 entries:
UUID("fb77eaff-e24c-56d4-86b1-d163f2edb164") => PackageInfo("Sundials_jll", v"5.2.0+1", "013ff4504fc1d475aa80c63b455b6b3a58767db2", false, false, false, false, true, noth…
UUID("4d4711f2-db25-561a-b6b3-d35e7d4047d3") => PackageInfo("MatrixMarket", v"0.3.1", "54d39ccb57d29aefa666418bca8ca5598ebd8225", true, false, false, false, true, nothing…
UUID("708ec375-b3d6-5a57-a7ce-8257bf98657a") => PackageInfo("Gumbo", v"0.8.0", "e711d08d896018037d6ff0ad4ebe675ca67119d4", false, false, false, false, true, nothing, noth…
UUID("9bbee03b-0db5-5f46-924f-b5c9c21b8c60") => PackageInfo("NaiveBayes", v"0.4.0", "296d27a455ae074d3cb27f7edeff8e6532865f87", true, false, false, false, true, nothing, …
UUID("c73af94c-d91f-53ed-93a7-00f77d67a9d7") => PackageInfo("ImageMagick_jll", v"6.9.10-12+3", "1c0a2295cca535fabaf2029062912591e9b61987", false, false, false, false, tru…
UUID("b99e7846-7c00-51b0-8f62-c81ae34c0232") => PackageInfo("BinaryProvider", v"0.5.10", "ecdec412a9abc8db54c0efc5548c64dfce072058", false, false, false, false, true, not…
UUID("cc61e674-0454-545c-8b26-ed2c68acab7a") => PackageInfo("Xorg_libxkbfile_jll", v"1.1.0+4", "926af861744212db0eb001d9e40b5d16292080b2", false, false, false, false, tru…
UUID("112f6efa-9a02-5b7d-90c0-432ed331239a") => PackageInfo("VegaLite", v"2.4.1", "eb937ff65666c83f6c4db40d07d2fecfedeaff7e", true, false, false, false, true, nothing, no…
UUID("7876af07-990d-54b4-ab0e-23690620f79a") => PackageInfo("Example", v"0.5.3", "46e44e869b4d90b96bd8ed1fdcf32244fddfb6cc", true, false, false, false, true, nothing, not…
UUID("c84ed2f1-dad5-54f0-aa8e-dbefe2724439") => PackageInfo("Ratios", v"0.4.0", "37d210f612d70f3f7d57d488cb3b6eff56ad4e41", false, false, false, false, true, nothing, not…
UUID("88cd18e8-d9cc-4ea6-8889-5259c0d15c8b") => PackageInfo("ConsoleProgressMonitor", v"0.1.2", "3ab7b2136722890b9af903859afcf457fa3059e8", false, false, false, false, tr…
UUID("37e2e46d-f89d-539d-b4ee-838fcccc9c8e") => PackageInfo("LinearAlgebra", nothing, nothing, false, false, false, false, true, nothing, nothing, "/usr/share/julia/stdli…
UUID("31c24e10-a181-5473-b8eb-7969acd0382f") => PackageInfo("Distributions", v"0.23.8", "9c41285c57c6e0d73a21ed4b65f6eec34805f937", true, false, false, false, true, nothi…
UUID("1bc83da4-3b8d-516f-aca4-4fe02f6d838f") => PackageInfo("SafeTestsets", v"0.0.1", "36ebc5622c82eb9324005cc75e7e2cc51181d181", false, false, false, false, true, nothin…
UUID("42fd0dbc-a981-5370-80f2-aaf504508153") => PackageInfo("IterativeSolvers", v"0.8.5", "704eee044a41b0e7e8417f7dd2a6b6b5361afd5f", false, false, false, false, true, no…
UUID("01680d73-4ee2-5a08-a1aa-533608c188bb") => PackageInfo("GenericSVD", v"0.3.0", "62909c3eda8a25b5673a367d1ad2392ebb265211", false, false, false, false, true, nothing,…
UUID("9a3f8284-a2c9-5f02-9a11-845980a1fd5c") => PackageInfo("Random", nothing, nothing, true, false, false, false, true, nothing, nothing, "/usr/share/julia/stdlib/v1.6/R…
...

這種方法會比較辛苦一點,在當中找到特定的套件版本。

如果是用套件的方法則是,安裝 PkgVersion 這個套件,並且使用 PkgVersion.Version 這個函式來取得已載入的套件版本資訊。

1
2
3
4
5
6
julia> using PkgVersion

julia> using DataFrames

julia> PkgVersion.Version(DataFrames)
v"0.21.8"