# 从 julia 文件创建独立应用程序
此示例说明了如何使用 Syslab AppBundler 将 Julia 文件打包为可部署执行文件。
注意
Syslab AppBundler 暂不支持在 Syslab Online 中使用。
# 1. 创建独立文件夹
使用 Syslab AppBundler,需要准备一个独立的文件夹,其中包含用户依赖的 jl 文件以及一些其他的资源文件。
在此示例中,创建一个 modfun 的空文件夹。
# 2. 编写可运行的 Julia 代码
在 modfun 文件夹中创建 main.jl 文件,作为打包的主文件。
要使得创建的应用程序支持命令行启动参数,需要设置 ARGS 命令行启动参数,类型为字符串数组。
代码如下:
using TyPlot
function modfun(m, n)
axis([-1 1 -1 1])
axis("square")
axis("off")
hold("on")
z = exp.(2 * im * pi * (0:n) / n)
for j = 0:n
zj = [z[j+1], z[mod.(j * m, n)+1]]
plot(real(zj), imag(zj))
end
end
function main(ARGS)
if length(ARGS) == 2
m = parse(Int, ARGS[1])
n = parse(Int, ARGS[2])
modfun(m, n)
# 若未传入参数,使用默认值
elseif length(ARGS) == 0
modfun(105, 200)
else
error("错误的输入参数,需要输入两个正整数")
end
end
# ARGS 为命令行启动参数,类型为字符串数组
main(ARGS)
# 关闭绘图窗口后,才会使进程结束
TyPlot.plt.show(block=true)
# 3. 打包用于目标的代码
在 modfun 文件中创建 build.jl 文件,用于打包 main.jl 文件为独立应用程序。
使用以下打包模板的代码,填写对应信息后后打包上述 Julia 代码:
using TyAppBundler
# app名称
app_name = "ModfunProject"
# 打包文件夹
src_dir = @__DIR__
# 目标文件夹
dest_dir = joinpath(dirname(src_dir), app_name)
# 主文件
user_file = joinpath(src_dir, "main.jl")
# 依赖函数库
deps = ["TyPlot"]
# 是否打包 runtime
has_runtime = false
# 是否创建日志文件(若创建日志文件,则输出不会在终端打印)
create_log_file = false
# 是否需要加密代码
encrypt = true
# 是否覆盖目标文件夹(如果文件夹已存在)
force = false
# 开始构建
TyAppBundler.bundle_app(
src_dir,
dest_dir,
user_file,
deps;
app_name=app_name,
has_runtime=has_runtime,
create_log_file=create_log_file,
encrypt=encrypt,
force=force,
)
运行 build.jl 文件进行打包,打包完成后会在目标文件夹下获得以下文件:

# 4. 运行独立应用程序
- 在系统命令提示符下,导航到包含独立可执行文件的文件夹;
- 根据您的操作系统,使用以下命令之一通过输入参量 105 和 200 运行 ModfunProject:
首次执行会进行预编译,需要等待一段时间。
Windows:
./ModfunProject.exe 105 200
Linux:
./ModfunProject.sh 105 200
运行结果:

# 5. 部署应用程序
打包好的文件夹即为最终部署产物,将该文件夹拷贝到用户指定机器即可使用,无需安装。
该示例需要依赖 Syslab 运行,若用户不想依赖 Syslab 就可运行部署应用程序,则需要在步骤 3 中,将 has_runtime 设置为 true。
注意
初次运行或移动文件夹后运行应用程序均需要预编译,此过程会花费一定时间,此时无需操作,等待编译结束即可;
如果打包依赖了多个 jl 文件或依赖了外部资源文件,则需要将这些文件全部放在打包文件夹中,并在 jl 代码中使用相对路径进行引用;
执行打包脚本需要在全局环境下进行,如果用户代码依赖了本地开发的函数库,需要将该函数库安装在全局环境中,并在打包脚本中将该函数库添加至依赖函数库中;
若用户选择打包 Runtime,且打包产物中存在 miniforge3 文件夹,则打包的文件夹不能放在中文路径下,这会导致 TyPlot 无法使用。