症状: Julia 1.13 已发布,但旧项目、科研包和论文复现实验不能确定是否安全。
最快解法: 第一周不要覆盖正式环境,先锁定旧版本与结果,建立独立测试环境,完成包兼容和数值回归,再决定升级、双轨或暂缓。

这份清单适合 3 类人:维护 Julia 科研包的开发者,可用它安排兼容性与 CI 检查;准备升级课题环境的研究生,可据此判断论文复现风险;管理多人课题组环境的技术人员,可据此制定版本冻结与回退流程。

最后更新于 2026 年 9 月 23 日,版本信息核实自 Julia 官方下载页、Julia 1.13 发布说明 与官方文档。Julia 补丁版本、生态包支持状态或重要回归出现后,应重新复核本文。

发布当天先把正式环境冻结

截至 2026 年 9 月 20 日,Julia 官方下载页显示 Julia 1.13.0 于 2026 年 9 月 9 日发布,并列为当前 Stable 版本,同时提供 Stable、LTS、旧版及不同平台安装信息。官方发布说明还指出,这是 1.x 系列中的次版本发布,包含新功能和行为调整;这并不等于你的科研项目可以跳过验收。(julialang.org)

你需要先保存以下内容:

  • 当前 Julia 版本,以及启动参数、环境变量和 startup.jl。
  • 项目的 Project.toml、Manifest.toml、脚本入口和数据处理说明。
  • CI 配置、测试日志、代表性输入文件与输出文件。
  • 论文或课题中最关键的数值结果、图形、收敛信息和异常记录。
  • 当前环境的恢复方法,包括 Julia 安装来源、包缓存位置和权限要求。

Manifest.toml 不是可有可无的依赖列表,而是当前环境中直接依赖和间接依赖的精确记录。官方 Pkg 文档说明,Project.toml 与 Manifest.toml 配合使用,可以实例化接近原状态的包环境;从 Julia 1.10.8 开始,还可以使用按 Julia 小版本命名的 Manifest 文件,例如 Manifest-v1.11.toml。(pkgdocs.julialang.org)

这一步的隐性成本在于:如果你只保存代码、不保存环境,之后即使重新安装同名包,也可能得到不同的依赖解析结果;如果只保存最终图表、不保存原始输入和容差标准,就无法判断新版本造成的是数值变化、数据变化,还是绘图流程变化。

第一小时建立隔离版本,而不是覆盖旧版本

Julia 官方建议典型安装使用 juliaup,它可以安装指定版本并处理路径管理;官方平台说明也列出了 macOS 与其他平台的安装路线。你应优先使用官方安装来源,不要把系统包管理器提供的版本当作课题组唯一基线。(julialang.org)

可以按下面的顺序操作:

  1. 复制项目目录。
    将旧项目复制到独立分支或新的工作目录,保留原始 Project.toml、Manifest.toml 和测试数据。

  2. 安装 Julia 1.13。
    使用 juliaup 或官方二进制安装 Stable 版本。安装完成后记录 versioninfo() 输出、安装路径和架构信息。

  3. 明确 Apple Silicon 与 Intel 路线。
    如果课题组成员使用 Apple Silicon,不要只验证 Rosetta 或 x86 路径。分别记录原生架构、二进制依赖和需要重新编译的包;Julia 官方下载页已经区分 macOS Apple Silicon 安装文件。(julialang.org)

  4. 复制环境而不是重新自由解析。
    优先用项目现有的 Manifest 恢复环境,再单独尝试升级依赖。这样可以区分“Julia 版本变化”与“包版本同时变化”造成的问题。

  5. 保存安装日志和恢复命令。
    至少记录 Julia 版本、激活目录、包实例化命令、预编译结果和失败日志。多人课题组不能只依赖某一位成员的记忆恢复环境。

  6. 确认回退路径。
    旧 Julia、旧 Manifest、旧测试数据和旧 CI 配置必须仍然可用。若新环境出现无法解释的结果差异,你应能在同一天内回到旧环境继续工作。

在这一阶段,Julia 1.13 的安装成功不代表科研项目升级成功。真正的通过标准是:项目能恢复、核心包能加载、最小测试能运行,而且旧环境仍然可复现。

第一天用核心包和数值回归判断风险

Julia 包兼容不能只看包管理器是否完成解析。Project.toml 中的 [compat] 约束会限制 Julia 和依赖包的可用版本;如果项目没有明确约束,Pkg 可能把项目视为兼容更宽泛的版本范围。官方兼容性文档对版本约束和语义化版本规则有详细说明。(pkgdocs.julialang.org)

建议把项目测试分成 4 层:

1.加载与接口层

先检查核心包是否能够正常 using,再运行项目最常用的函数。重点记录:

  • 方法不存在、导出名称变化和弃用警告;
  • 类型转换、关键字参数和默认值变化;
  • 文件读写、序列化和配置读取是否一致;
  • 依赖二进制库是否能在目标架构加载。

2.最小数据层

不要一开始就运行完整课题数据。先准备一组规模较小、结果已知的输入,验证预处理、模型构建、求解和结果导出链路。这样可以把包兼容问题与数据规模、内存压力和长时间运行问题分开。

3.数值回归层

对每个核心模型保存以下证据:

  • 标量结果与允许误差;
  • 向量或矩阵的最大绝对差、相对差;
  • 迭代次数、收敛状态和残差;
  • 图形中的坐标范围、峰值位置和图例;
  • 随机过程使用的种子、采样数量和输出摘要。

浮点数出现微小差异并不必然意味着升级失败,但你必须能解释差异来源。排序顺序、随机数流、线程调度、线性代数后端或包内部算法都可能影响结果;论文复现尤其不能只比较“程序退出码为 0”。

4.异常与边界层

刻意运行缺失值、空输入、极端参数、非法路径和中断场景。很多兼容问题不会出现在标准样例中,而会在错误处理、日志格式和边界输入下暴露。

Pkg 官方文档建议使用 add、compat、update 等命令管理依赖,而不是手工改写 Manifest。对需要固定包版本的课题,应把兼容约束写入项目文件,并把环境文件纳入版本控制。(pkgdocs.julialang.org)

用对比结果决定升级、双轨还是暂缓

到了第一周中段,你不需要凭感觉争论“新版本是否更好”,而应把决定拆成可检查的条件。

决策结果 适用条件 你需要保留的证据 主要风险
升级正式环境 核心包可解析,数值回归通过,CI 通过,成员能恢复环境 测试日志、结果差异说明、回退提交 个别低频脚本可能尚未覆盖
双轨运行 主流程基本通过,但仍有包、架构或成员机器未确认 Stable 与旧版本的环境文件、差异清单 维护两条环境会增加文档和 CI 成本
暂缓升级 核心包不兼容、结果差异无法解释、论文临近提交或回退困难 失败日志、问题包版本、复核日期 错过新版本改进,但可保护课题复现
新项目采用 Stable 没有历史结果需要对照,依赖范围清晰,测试从一开始就纳入 CI 初始环境文件、测试基线和安装说明 早期生态问题仍需持续观察

评分时可以给每个项目维度打 0—2 分:

  • 包兼容:0 分表示无法解析,1 分表示主流程可用但有已知问题,2 分表示核心包和异常路径均通过。
  • 数值一致性:0 分表示差异无法解释,1 分表示部分结果需复核,2 分表示所有关键指标符合项目容差。
  • CI 完整度:0 分表示没有新版本测试,1 分表示只有单一系统,2 分表示已覆盖课题真正使用的版本和系统。
  • 回退能力:0 分表示无法恢复,1 分表示需要人工排障,2 分表示按文档即可恢复。
  • 课题时机:0 分表示论文或实验处于不可中断阶段,1 分表示可以安排窗口,2 分表示新项目或低风险阶段。

如果总分偏低,不要因为 Julia 1.13 是 Stable 就强行切换。Stable 代表官方发布路线,不代表所有第三方科研包、二进制依赖和课题脚本已经完成同一时间点的验证。

第一周把 CI、文档和 Apple Silicon 验收补齐

CI 的目标不是证明“某台机器能运行”,而是尽早发现版本、操作系统和架构之间的差异。Julia 生态提供的 setup-julia 支持指定版本、版本范围和矩阵测试;其文档还特别提醒,YAML 中的版本应使用字符串,否则类似 1.10 的值可能被解析成其他数字。(github.com)

一个面向课题组的最小矩阵可以包含:

julia-version: ["旧版本", "1.13"]
os: [ubuntu-latest, macos-latest]

不要机械复制这个示例。你应根据课题实际交付环境决定是否增加 Windows、Intel macOS、Apple Silicon 自托管 Runner 或特定 Julia LTS 路线。GitHub 官方文档说明,矩阵策略可以用同一个任务定义测试多个语言版本和操作系统组合,但矩阵扩大后也会增加运行时间和失败排查量。(docs.github.com)

第一周至少完成以下检查:

  • CI 是否明确打印 versioninfo() 和架构信息;
  • 包测试是否使用项目自己的 Manifest;
  • 测试失败时是否保留完整日志和生成文件;
  • 图形、模型输出和基准输入是否有可比较的快照;
  • README 是否写清安装、激活、测试和回退命令;
  • 课题组成员是否能在自己的机器上恢复,而不是只有管理员能恢复;
  • Apple Silicon 上是否使用了正确架构的 Julia 和二进制依赖;
  • 远程登录、文件传输和权限是否足够完成完整验收。

如果你需要比较 Mac Stable 与 LTS 的长期路线,可以先阅读 Julia 版本选择与环境冻结说明,再把结论写入维护记录,而不是只写“以后再看”。涉及 macOS 科研依赖的成员,也可以结合课题组内部的设备管理与远程访问规范,提前确认责任划分。

没有 Mac 时完成 Apple Silicon 验收

没有 Mac 不等于无法测试 macOS 路径,但你需要区分 3 种目标:

  1. 验证 Julia 和科研包能否在 macOS 上安装、解析和运行。
  2. 验证 Apple Silicon 原生架构下的二进制依赖与脚本行为。
  3. 验证真实课题数据、外设、权限或本地文件系统集成。

前两项可以通过远程真实 Mac 完成。你可以建立隔离账户或项目目录,使用 SSH 执行安装与回归脚本,再通过 VNC 检查图形界面、绘图输出和需要交互操作的工具。远程真实 Mac 适合在短期升级窗口内补足实验室缺少的 macOS 设备;但它不能替代对专用仪器、USB 外设、校内网络策略和本地数据合规要求的验证。

建议远程验收按 5 步进行:

  1. 记录远程主机的 macOS 版本、芯片架构和 Julia 安装来源。
  2. 上传或拉取项目的 Project.toml、Manifest.toml 与最小测试数据。
  3. 使用 Julia 1.13 原生架构实例化环境,保存包解析与预编译日志。
  4. 运行同一套核心包测试、数值回归和图形导出任务。
  5. 将结果与 Linux、Windows 或旧 Mac 环境进行对照,并记录哪些差异属于平台特性。

不要把远程 Apple Silicon 测试结果包装成“所有 Mac 都兼容”。不同 macOS 版本、系统权限、二进制依赖、图形后端和数据路径都可能改变结果;你能确认的是某个明确环境下的验收结论。

第一周结束时写下长期维护决定

在维护记录中明确写出以下内容:

  • 当前正式环境仍使用哪个 Julia 版本;
  • Julia 1.13 测试分支是否继续保留;
  • 哪些包已确认兼容,哪些包需要锁定或补丁;
  • 数值回归的容差、输入数据和负责人;
  • CI 中的版本矩阵与失败通知方式;
  • 下一次复核日期,以及触发提前复核的事件;
  • 如果新版本失败,如何恢复到旧环境。

如果核心结果一致、包维护状态稳定、CI 和远程 Apple Silicon 验收均通过,可以安排分批升级;如果只有部分成员环境完成验证,双轨通常比一次性切换更稳妥;如果论文复现窗口很近,或者关键包的差异无法解释,暂缓并不意味着技术落后,而是把回退成本控制在可接受范围内。

FAQ

Julia 1.13 发布后,已经运行的科研项目应该马上升级吗?

不建议直接覆盖正式环境。先保存当前 Julia 版本、Project.toml、Manifest.toml、CI 配置和代表性结果,再创建独立测试分支。只有核心包能够解析、关键数值结果通过回归、文档和成员恢复流程也验证完成时,才适合把正式项目切换到 Julia 1.13。

如何系统检查 Julia 1.13 下的科研包兼容性?

先用 Julia 1.13 激活项目环境并执行实例化,再检查直接依赖和间接依赖的解析结果。随后运行包测试、核心脚本和异常路径,重点查看弃用 API、二进制依赖、线程行为以及绘图或文件输出变化。不要只用“能安装、能启动”作为兼容标准。

Julia 新版本怎样验证数值结果没有悄悄改变?

用旧环境生成并保存一组代表性输入、输出、误差指标、收敛曲线和日志,再在 Julia 1.13 中重复运行。对浮点结果设置项目自己的容差,同时单独检查排序、随机种子、缺失值处理、迭代次数和异常信息。若结果差异无法解释,应先双轨运行而不是直接发布。

没有 Mac,怎样测试 Julia 1.13 的 Apple Silicon 环境?

可以使用远程真实 Mac 建立一次隔离验收环境,通过 SSH 或 VNC 安装官方 Julia 二进制,恢复 Project.toml 与 Manifest.toml,然后执行同一组包测试和数值回归。远程环境适合验证 macOS 与 Apple Silicon 路径,但不能替代你对实验室数据、权限和实际外设的测试。

对大多数课题组来说,当前的 Linux 或 Windows 方案仍然适合主力计算,但它们可能缺少原生 macOS、Apple Silicon 二进制路径和图形界面验收条件;临时借用个人 Mac 又会遇到权限、环境污染和成员无法复现的问题。与其为了第一周验证购买一台长期闲置的设备,不如把远程 Mac 作为隔离验收节点,先完成 Julia 1.13 的证据链,再决定是否值得长期投入。SSHMac 的价值在这里不是承诺升级后一定更快,而是让你在不改动正式环境的前提下完成真实 macOS 测试;如果你只需要临时算力或短期兼容性验证,可以先查看 SSHMac 帮助中心,按验收清单确认环境后再决定下一步。