You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何缩小基于Clojure+Origami的OpenCV AWS Lambda部署包体积?

解决Lein-Lambda部署AWS Lambda时OpenCV多平台依赖导致体积超限的问题

我之前用Origami+OpenCV部署Lambda的时候也碰到过这个体积超标的坑,核心问题就是Origami默认会把多平台的OpenCV原生库都打包进去,而Lambda只需要Linux环境的版本就行。咱们可以通过调整Leiningen的uberjar配置来精准剔除多余文件,具体方案如下:

方法一:通过:uberjar-exclusions直接排除非Linux依赖

在你的project.clj里找到:uberjar配置块,添加正则规则排除macOS和Windows相关的原生库文件:

(defproject your-project-name "0.1.0-SNAPSHOT"
  ;; 其他项目配置(比如依赖、lambda配置等)...
  :uberjar {:aot :all
            :uberjar-exclusions [#"^.*macosx.*$" #"^.*windows.*$"]})

这个配置会让Leiningen在构建uberjar时,跳过所有路径中包含macosx或windows的文件,只保留Linux平台的OpenCV库。

方法二:精准指定只包含需要的Linux架构库

如果你的Lambda使用特定架构(比如arm64或者x86_64),可以进一步缩小打包范围,只保留对应架构的Linux库,同时排除其他:

:uberjar {:aot :all
          :uberjar-exclusions [#"^.*(macosx|windows|linux-(x86_64|aarch64))(?!-x86_64).*$"]
          :uberjar-inclusions [#"^.*linux-x86_64.*$"]}

比如上面的示例是针对x86_64架构的Lambda,如果你用的是arm64,就把配置里的x86_64替换成aarch64即可,这样只会保留对应架构的Linux库,体积能进一步压缩。

方法三:部署前手动清理(应急方案)

如果暂时不想修改project.clj,可以在执行lein lambda deploy production之前,手动删除target目录里的多余文件:

# 清理macOS和Windows的OpenCV库
rm -rf target/uberjar/lib/org/opencv/core/native/macosx* target/uberjar/lib/org/opencv/core/native/windows*

不过这个是临时方案,每次部署都要执行,不如配置project.clj来得省心。

验证效果

修改配置后,先执行lein uberjar,然后查看target/uberjar/lib/org/opencv/core/native/目录,确认只有Linux相关的文件夹(比如linux-x86_64),再执行部署命令,此时打包体积应该就能控制在250MB以内了。

内容的提问来源于stack exchange,提问作者benwiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:50:02