为特定 Linux 风格预编译 R 包
Posted
技术标签:
【中文标题】为特定 Linux 风格预编译 R 包【英文标题】:Precompile R packages for specific Linux flavor 【发布时间】:2019-05-07 22:06:34 【问题描述】:我们已经为 R 包建立了一个简单的类似 CRAN 的本地存储库。用户很多,都使用同一个版本的Linux。
有没有办法说服 R 提供预编译的 Linux 包而不是只提供源包?对于使用我们存储库的任何人来说,编译步骤都需要相当长的时间。应该可以预编译和重用相同的二进制文件,因为我们可以保证 Linux 版本对所有用户都是一致的。
一个人怎么能一起破解这样的东西?
【问题讨论】:
您可能对 cran2deb 和 cran2deb4ubuntu 作为示例感兴趣,尽管它可能对您没有特别的帮助,因为您可能不是在谈论基于 Debian 的发行版。你们都在运行什么发行版? (也就是说,“有没有办法说服 R 提供预编译的 Linux 包而不是源包?”的答案是“可能不是”,但“应该是可以预编译和重用相同的二进制文件”是“是”,而“如何将这样的东西一起破解?”的答案会因您的发行版而异) @duckmayr CentOS 6 目前正在迁移到 CentOS 7。用户没有管理员权限并安装到他们自己的本地存储库中,所以我认为 Linux 软件包不是一个好的解决方案。如果可能的话,我想依赖 R 的内置机制,所以安装我们的包就像从 CRAN 安装一样。 【参考方案1】:在“所有这些都使用相同版本的 Linux”的非常狭义的意义上,您实际上有一个选择(恰好相对鲜为人知)。使用 例如
创建二进制包 R CMD INSTALL --build nameOfDirectoryWithSources
正如R CMD INSTALL --help
所说的那样
--build build binaries of the installed package(s)
这些不是 .deb
或 .rpm
类似的包:没有添加依赖信息或类似的信息。但他们完全按照您的要求做:节省编译时间。
我不知道可以构建一个存储库结构。
【讨论】:
这给了我一个想法——我可以编译包并将其转换为“源包”,“不需要编译”。然后所有的二进制部分都只是“有效负载”......我希望在 repo 中有一个单独的目录,以将预编译的源代码与真正的源代码分开,但此时我愿意破解, 我怀疑你没有尝试过我的建议:)。请这样做,它与您所描述的差不多。 我已经尝试了你的建议。它为我创建了一个以上是关于为特定 Linux 风格预编译 R 包的主要内容,如果未能解决你的问题,请参考以下文章