如何在纯 Julia 中使用同元包(一个非正式方案)

大家好,之前在 同元 Julia 包服务器 中介绍了同元 Syslab 包服务器的相关信息。后来收到了社区一些小伙伴的问题:能不能在不使用 Syslab 的情况下使用同元的函数库。答案是肯定可以的,这个帖子的目的就是教大家如何进行。

澄清:这个帖子属于我作为 Syslab 内部开发者给出的在当前有用的策略,它不代表未来这一方案依然可用。对于同元目前的产品策略来说:正式的方案是直接使用 Syslab 全家桶

我这里以 macOS x86 架构为例进行演示(截止目前为止,同元还暂不支持 macOS ARM 架构),其他平台的操作类似。


在纯 Julia 下使用同元函数库需要两个准备工作:

  1. 配置同元下载服务器
  2. 配置运行同元函数库所需的 Python 依赖

1. 配置同元下载服务器

设置环境变量 JULIA_PKG_SERVER = "https://releases.tongyuan.cc/juliapkg (详细说明见 同元 Julia 包服务器 )

配置完成后,你应该可以在 versioninfo 的结果中看到对应的字段:

julia> versioninfo()
...
Environment:
  JULIA_PKG_SERVER = https://releases.tongyuan.cc/juliapkg

目前 Julia 在切换包服务器的时候有一些不太方便。为了确保切换有效,这里建议清空注册表:

(@v1.10) pkg> registry st
Registry Status
 [23338594] General (https://github.com/JuliaRegistries/General.git)

(@v1.10) pkg> registry rm General
    Removing registry `General` from ~/.julia/registries/General.toml

(@v1.10) pkg> registry st
Registry Status
  (no registries found)

此时再敲 pkg> st 则会重新下载新的注册表,并且拿到同元的注册表 Syslab

(@v1.10) pkg> st
  Installing known registries into `~/.julia`
...

(@v1.10) pkg> registry st
Registry Status
 [23338594] General (https://github.com/JuliaRegistries/General.git)
 [fe1a5c12] Syslab (https://git.tongyuan.cc/syslab-release/stream/SyslabRegistry.git)

这样一来,你就可以正常安装同元所需的函数库,以 TyRandom 为例:

(@v1.10) pkg> add TyRandom
    Updating registry at `~/tmp/registries/General.toml`
    Updating registry at `~/tmp/registries/Syslab.toml`
   Resolving package versions...
   Installed TyRandom ─ v0.1.2
   Installed TyAPI ──── v0.3.8
    Updating `~/tmp/environments/v1.10/Project.toml`
  [e1161ee3] + TyRandom v0.1.2
    Updating `~/tmp/environments/v1.10/Manifest.toml`
  [47291b8a] + TyAPI v0.3.8
  [e1161ee3] + TyRandom v0.1.2
  [0dad84c5] + ArgTools v1.1.1
...

(是的,同元的函数库几乎都是以 Ty 前缀开头)

julia> using TyRandom

julia> rng = MT19937ar(1234)
MT19937ar(1234)

julia> rand(rng, 4, 4)
4×4 Matrix{Float64}:
 0.191519  0.779976  0.958139  0.683463
 0.622109  0.272593  0.875933  0.712702
 0.437728  0.276464  0.357817  0.370251
 0.785359  0.801872  0.500995  0.561196

2. 配置 Python 依赖

TyRandom 是一个不需要 python 就能运行的纯 Julia 库,而以 TyPlot 为代表的绘图库则需要配置 python 环境。

你可以通过 anaconda 安装 python 以及所需的 matplotlib (3.5 版本)和 PyQt 5,安装完成后,通过 PYTHON 环境变量设置对应的 python 二进制程序的路径。

例如,我使用 miniconda 创建了一个 conda_jl 名称的环境,并安装了所需的依赖。在 conda_jl 下我的 python 路径是 /Users/jc/miniconda3/envs/conda_jl/bin/python,所以我只需要将 PYTHON 环境变量设置为 /Users/jc/miniconda3/envs/conda_jl/bin/python 即可。

(@v1.10) pkg> add PyCall TyPlot
  Installing known registries into `~/tmp`
    Updating registry at `~/tmp/registries/General.toml`
    Updating registry at `~/tmp/registries/Syslab.toml`
   Resolving package versions...
   Installed Preferences ──────── v1.4.1
   Installed OrderedCollections ─ v1.6.3
   Installed VersionParsing ───── v1.3.0
   Installed MacroTools ───────── v0.5.11
   Installed JSON ─────────────── v0.21.4
   Installed Conda ────────────── v1.10.0
   Installed Parsers ──────────── v2.8.0
   Installed TyAPI ────────────── v0.3.8
   Installed PrecompileTools ──── v1.2.0
   Installed PyCall ───────────── v1.96.4
   Installed TyPlot ───────────── v0.8.14
  Downloaded artifact: pythoncode
  ...

安装后,可以检查 PyCall 确实使用了这个路径:

julia> using PyCall

julia> PyCall.PYTHONHOME
"/Users/jc/miniconda3/envs/conda_jl"

然后就可以正常使用 TyPlot 了(当然你可能会需要安装一些其他所需的 python 依赖)

julia> using TyPlot

julia> bar(1:10)
...

关于同元绘图库的其他功能,可以参考 Syslab 帮助文档.


用的愉快 :laughing:

3 个赞