如何减小 R 包的安装大小?

3

在我的工作场所,我们正在安装不同版本的R语言库。所需的空间很快就会增加。我应该怎么做来尽量减小每个安装包的大小呢?

我知道可以使用 --no-docs 选项并需要使用 --with-keep.source。

编辑:这是我的设置的快速研究:

我将我的库复制到了 /tmp/library

library(fs)                                                                             
library(data.table)                                                                     
library(stringr)
lib_dir <- "/tmp/library"                                                               
pkgs <- dir_ls(lib_dir)
dirs <- dir_info(pkgs, recurse = TRUE)[,1:3]                                            
setDT(dirs)
dirs <- dirs[type != "directory"]

# ==> We can see files at the root of each library take 12M in aggreagte <==
dirs[depth == 4, .(size = sum(size))]
#    size
# 1:  12M

dirs[, depth := str_count(path, "/")]
dirs[, pkg := file.path(lib_dir, str_match(path, sprintf("%s/(.*?)/.*", lib_dir))[,2L])]
dirs[depth > 4L, pkg_dir := str_match(path, sprintf("%s/(.*?)/.*", pkg))[,2L]]

# ==> The worst offenders are indeed libs, and lib is also large <==
dirs[depth > 4, .(size = sum(size)), pkg_dir][order(-size)][1:10]
#     pkg_dir    size
#  1:    libs 610.77M
#  2: include 144.18M
#  3:     doc 140.93M
#  4:     lib 104.58M
#  5:       R  91.31M
#  6:    help  61.78M
#  7:    html  51.02M
#  8:    data   25.9M
#  9:    java  11.74M
# 10:     www   8.38M

接下来,我对libslib运行了strip --strip-debug命令,得到了以下结果:

dirs[depth > 4, .(size = sum(size)), pkg_dir][order(-size)][1:10]
#         pkg_dir    size
#  1:     include 144.18M
#  2:         doc 140.93M
#  3:        libs  95.24M
#  4:           R  91.31M
#  5:        help  61.78M
#  6:        html  51.02M
#  7:        data   25.9M
#  8:        java  11.74M
#  9:         www   8.38M
# 10: htmlwidgets   8.24M

通过上述示例,我有以下疑问: docs 似乎包含了可以使用 browseVignettes() 访问的小册子。虽然我不需要这些小册子,但我仍然需要 help("stuff") 起作用。

  • 我是否可以使用 --no-docs--no-help 实现这一点(我尝试过运行 R CMD INSTALL --no-docs --no-html xtable,但仍会生成pdf和html文件)?
  • 是否还有其他东西可以保存而不失去基本功能?

请查看 http://dirk.eddelbuettel.com/blog/2017/08/14/#009_compact_shared_libraries 和 http://dirk.eddelbuettel.com/blog/2017/08/20/#010_stripping_shared_libraries。 - JRR
该死,我以前看到过它。那正是我想要的。随意回答。 - statquant
1个回答

1
Dirk EddelBuettel在2017年写了两篇博客文章,这里很难概括。R包的大小并不来自于文档或源代码,而是来自于二进制文件编译时加入调试符号的事实。其想法是使用更具体的选项自己编译软件包,以消除二进制文件中无用的内容。对于带有编译代码的软件包,收益非常显著(空间减少4-5倍)。

甚至还有第三篇博客文章:http://dirk.eddelbuettel.com/blog/2019/03/27/ - statquant
有趣的是,这意味着现在有了本地解决方案。 - JRR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接