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

如何缩小基于DesktopDeployR构建的Shiny独立应用体积?

缩小Shiny独立应用体积的解决方案

我用DesktopDeployR框架构建了一个Shiny独立应用,当前体积达380MB,希望缩小体积,请问有什么解决办法?是否需要更换其他框架或包?

应用文件结构

Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    d-----          8/3/2023   5:41 PM                app
    d-----          8/3/2023   5:41 PM                dist
    -a----         7/27/2023   3:53 PM             39 .gitignore
    -a----         7/27/2023   3:53 PM          11558 LICENSE
    -a----         7/27/2023   3:53 PM             31 MyApp.bat
    -a----         7/27/2023   3:53 PM           7952 README.md


PS C:\Users\myr\Desktop\MyApp> ls app


    Directory: C:\Users\myr\Desktop\MyApp\app


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          8/3/2023   5:41 PM                library
d-----          8/3/2023   5:41 PM                shiny
-a----         7/27/2023   3:53 PM             81 app.R
-a----         7/30/2023  11:26 AM           1531 config.cfg
-a----          8/3/2023  10:32 AM            475 packages.txt


PS C:\Users\myr\Desktop\MyApp> ls dist


    Directory: C:\Users\myr\Desktop\MyApp\dist


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          8/3/2023   5:41 PM                R-Portable
d-----          8/3/2023   5:41 PM                script
-a----         7/27/2023   3:53 PM           2468 USAGE.md

其中library文件夹占用空间最大,约200MB。

已安装的包

askpass, backports, base64enc, bit, bit64, blob, broom, bslib, bsplus, cachem, callr, cellranger, cli, clipr, colorspace, commonmark, conflicted, cpp11, crayon, crosstalk, curl, data.table, DBI, dbplyr, digest, dplyr, DT, dtplyr, ellipsis, evaluate, fansi, farver, fastmap, fontawesome, forcats, fs, gargle, generics, ggplot2, glue, googledrive, googlesheets4, gt, gtable, haven, highr, hms, htmltools, htmlwidgets, httpuv, httr, ids, isoband, jquerylib, jsonlite, knitr, labeling, later, lazyeval, lifecycle, lubridate, magrittr, memoise, mime, modelr, munsell, openssl, pillar, pkgconfig, plotly, prettyunits, processx, progress, promises, ps, purrr, R6, ragg, rappdirs, RColorBrewer, Rcpp, readr, readxl, rematch, rematch2, reprex, rlang, rmarkdown, rstudioapi, rvest, sass, scales, selectr, shiny, shinyalert, shinycssloaders, shinyjs, shinypop, sourcetools, stringi, stringr, sys, systemfonts, textshaping, tibble, tidyr, tidyselect, tidyverse, timechange, tinytex, tzdb, utf8, uuid, vctrs, viridisLite, vroom, withr, writexl, xfun, xml2, xtable, yaml

应用实际使用的包

library(shiny)
library(readxl)
library(tidyverse)
library(plotly)
library(writexl)
library(data.table)
library(shinycssloaders)
library(bsplus)
library(DT)
library(shinyalert)

具体解决办法

1. 清理冗余依赖包

实际用到的包仅10个,但打包的依赖包多达几十个,像tinytex、googledrive、googlesheets4、rmarkdown这类完全没用的包,直接从app/library里删掉就行。另外tidyverse是包集合,包含broom、dbplyr等你可能没用到的子包,如果只需要其中几个(比如dplyr、ggplot2、tidyr),可以卸载整个tidyverse,单独安装所需子包,能省不少空间。

2. 精简R-Portable

dist/R-Portable里有大量非必需文件,可直接删除:

  • 所有帮助文档(doc、help文件夹)
  • 示例数据和源代码(share文件夹内非核心内容)
  • 未使用的语言包
  • bin文件夹里的辅助工具可执行文件
    删除后R-Portable体积能大幅缩减。

3. 用依赖工具精准打包

用renv或packrat创建仅包含应用必需依赖的环境,替换DesktopDeployR生成的library文件夹。这两个工具会自动分析代码,只安装实际用到的包及其直接依赖,避免冗余。

4. 压缩应用文件夹

用7-Zip、WinRAR等工具对应用文件夹做高压缩(比如7-Zip的Ultra级别),或打包成自解压压缩包,分发体积会小很多。

5. 尝试替代框架(可选)

如果上述优化后体积仍不达标,可换用其他打包工具:

  • Golem:专为生产级Shiny应用设计,依赖管理更精准,生成的应用体积通常更小。
  • RInno:基于Inno Setup打包,支持自定义精简R环境,还能生成安装程序。
  • Electron + Shiny:把Shiny应用嵌入Electron,配置稍复杂,但可实现更轻量的打包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:09:53