Wait the light to fall

Julia 中的 Pkg

焉知非鱼

Pkg

进入 Pkg 模式 #

Pkg 是 Julia 中包管理工具。Pkg 来自于 REPL, 在 Julia 的 REPL 中按下 ] 就进入 Pkg REPL 了。要回到 Julia REPL, 按退格键或 ^C

使用 Pkg #

add JSON              # 添加一个 package
add JSON StaticArrays # 添加多个 package
rm JSON               # 移除一个 package
rm JSON StaticArrays  # 移除多个 package
add https://github.com/JuliaLang/Example.jl # 添加一个未注册的 package
rm Example            # 按名字移除 package
update Example        # 升级一个已安装的 package
update                # 升级所有已安装的 package

environments #

你可能已经注意到 Pkg REPL 提示符前面的 (@v1.5) 字符串了。这里的 (@v1.5) 就是激活环境(active environment)。激活环境是能被诸如 addrmupdate 等 Pkg 命令修改的环境。

我们可以设置一个新的激活环境用于实验。要设置激活环境, 使用 activate:

(@v1.5) pkg> activate tutorial
Activating new environment at `~/tutorial/Project.toml`

~/tutorial/Project.toml 是激活环境的项目文件。项目文件是 Pkg 存储环境的元数据的地方。

(tutorial) pkg> status
Status `~/tutorial/Project.toml` (empty project)

现在这个新的环境是空的, 我们添加一个 package 观察下:

(tutorial) pkg> add Example
   Updating registry at `~/.julia/registries/General`
   Updating git-repo `https://github.com/JuliaRegistries/General.git`
  Resolving package versions...
    Cloning [7876af07-990d-54b4-ab0e-23690620f79a] Example from https://github.com/JuliaLang/Example.jl.git
  Installed Example ─ v0.5.3
Updating `~/tutorial/Project.toml`
  [7876af07] + Example v0.5.3
Updating `~/tutorial/Manifest.toml`
  [7876af07] + Example v0.5.3

status 命令查看激活环境的信息:

(tutorial) pkg> status
Status `~/tutorial/Project.toml`
  [7876af07] Example v0.5.3

使用 develop 命令设置 Example package 的 一个 git clone, 以供我们修改这个本地仓库:

(tutorial) pkg> develop --local Example
    Cloning git-repo `https://github.com/JuliaLang/Example.jl.git`
  Resolving package versions...
Updating `~/tutorial/Project.toml`
  [7876af07] ~ Example v0.5.3 ⇒ v0.5.4 `dev/Example`
Updating `~/tutorial/Manifest.toml`
  [7876af07] ~ Example v0.5.3 ⇒ v0.5.4 `dev/Example`

; 切换到 shell 模式, 用 vi 修改 ~/tutorial/dev/Example/src/Example.jl 文件, 增加一个 plusone 函数, 保存。

在 Julia 的 REPL 中, 导入修改后的 Example package:

julia> import Example
[ Info: Precompiling Example [7876af07-990d-54b4-ab0e-23690620f79a]

julia> Example.plusone(1)
2

julia> Example.plusone(4)
5

可以看到我们添加的函数生效了, 这样就很方便我们添加测试新功能。如果我们已经不再需要本地的 Example 了, 需要使用 free 命令以停止使用本地克隆的 package, 转而使用已注册版本代替:

(tutorial) pkg> free Example
  Resolving package versions...
Updating `~/tutorial/Project.toml`
  [7876af07] ~ Example v0.5.4 `dev/Example` ⇒ v0.5.3
Updating `~/tutorial/Manifest.toml`
  [7876af07] ~ Example v0.5.4 `dev/Example` ⇒ v0.5.3

如果已经用 tutorial 做完实验了, 可以使用不带参数的 activate 回到默认环境:

(tutorial) pkg> activate
 Activating environment at `~/.julia/environments/v1.5/Project.toml`

(@v1.5) pkg>