如何最简打包分发附带预编译包的Julia版本
跨平台Julia预装科学计算常用包解决方案
前置准备
- 分别在三类平台的对应架构设备上安装官方Julia稳定LTS版本,避免跨版本包兼容性问题
- 全局安装编译工具:启动Julia后运行
using Pkg; Pkg.add("PackageCompiler") - 提前安装所有需要预装的课程用包:运行
Pkg.add(["Plots", "DifferentialEquations"]),逐个验证包可正常加载使用:Plots需验证默认GR后端可正常绘图,DifferentialEquations需验证简单微分方程可正常求解,排除版本冲突后再进行后续编译操作 - 提前编写预编译执行脚本
precompile_script.jl,写入课程常用的包调用逻辑,示例内容如下:
using Plots plot(rand(10), rand(10)) savefig(tempname()*".png") using DifferentialEquations f(u,p,t) = 1.01*u u0=1/2 tspan = (0.0,1.0) prob = ODEProblem(f,u0,tspan) sol = solve(prob, Tsit5(), reltol=1e-8, abstol=1e-8)
分平台操作步骤
Windows平台
- 完成前置准备后,在Julia中运行如下代码生成自定义系统镜像:
using PackageCompiler create_sysimage( [:Plots, :DifferentialEquations], sysimage_path = "JuliaCourseSysimage.dll", precompile_execution_file = "precompile_script.jl" )
- 下载官方Julia免安装压缩包解压,将生成的
JuliaCourseSysimage.dll放入解压目录的bin文件夹内 - 同目录下新建启动脚本
启动Julia实验环境.bat,写入内容:@echo off && start "" "%~dp0\bin\julia.exe" -J "%~dp0\bin\JuliaCourseSysimage.dll" - 将整个解压目录打包为zip文件分发给学生即可,学生解压后双击bat文件启动,所有预装包直接可用,无需额外下载编译
macOS平台
需按Intel、Apple Silicon两类架构分别编译,镜像不可跨架构通用
- 完成前置准备后,在Julia中运行如下代码生成自定义系统镜像:
using PackageCompiler create_sysimage( [:Plots, :DifferentialEquations], sysimage_path = "JuliaCourseSysimage.dylib", precompile_execution_file = "precompile_script.jl" )
- 右键点击官方Julia.app选择「显示包内容」,进入
Contents/Resources/julia/lib/julia/目录,将生成的dylib文件放入该目录 - 在Julia.app同级目录下新建启动脚本
启动Julia实验环境.command,写入内容:
#!/bin/bash SCRIPT_DIR=$(cd "$(dirname "$0")"; pwd) "$SCRIPT_DIR/Julia.app/Contents/Resources/julia/bin/julia" -J "$SCRIPT_DIR/Julia.app/Contents/Resources/julia/lib/julia/JuliaCourseSysimage.dylib"
- 给脚本添加执行权限:
chmod +x 启动Julia实验环境.command,将脚本和Julia.app打包为dmg即可;也可通过Automator工具将启动脚本封装为标准.app格式,适配学生日常使用习惯
Linux平台
- 完成前置准备后,在Julia中运行如下代码生成自定义系统镜像:
using PackageCompiler create_sysimage( [:Plots, :DifferentialEquations], sysimage_path = "JuliaCourseSysimage.so", precompile_execution_file = "precompile_script.jl" )
- 下载官方Julia免安装tar包解压,将生成的.so文件放入解压目录的
lib/julia/文件夹内 - 同目录下新建启动脚本
启动Julia实验环境.sh,写入内容:
#!/bin/bash SCRIPT_DIR=$(cd "$(dirname "$BASH_SOURCE")"; pwd) exec "$SCRIPT_DIR/bin/julia" -J "$SCRIPT_DIR/lib/julia/JuliaCourseSysimage.so" "$@"
- 给脚本添加执行权限:
chmod +x 启动Julia实验环境.sh,将整个目录打包为tar.gz即可
注意事项
- 不同操作系统、不同CPU架构的系统镜像不可通用,必须在对应环境下分别编译
- 后续需要更新预装包时,仅需重新生成对应系统镜像替换原有文件即可,无需重新打包整个Julia环境
- 学生自行安装额外第三方包不会影响预装包的预编译效果,可正常使用Pkg工具操作
- 若课程需要使用Jupyter环境,可将IJulia加入预装包列表,在预编译脚本中补充kernel启动相关逻辑即可
内容的提问来源于stack exchange,提问作者Stéphane Mottelet
相关产品推荐
相关产品推荐

