如何识别 R 包中的非 R 依赖项?

How Can I Identify non-R Dependencies in an R Package?

我最近开始在 Linux 系统 (Ubuntu 20.4) 上使用 RStudio,此前它专门用于 Windows。我很快意识到两者之间的主要区别是 R will automatically locate and download non-R dependencies on Windows, but will not do so on Linux. Searching for the dependencies of any given package is easy enough 并且我很乐意通过终端下载非 R 包。 不过,我仍在苦苦挣扎的是确定哪些包是 R 包,哪些包是非 R 包,我还没有找到概述如何执行此操作的线程。我当然可以花一些时间在谷歌上搜索每个,但是,作为一个例子,ggpubr 单独使用了超过 95 个依赖包。 如何有效地确定包需要哪些非 R 依赖项?

您需要阅读 DESCRIPTION 文件。它有一个名为 SystemRequirements 的 free-form 字段,描述了包的 non-standard 要求。

您可以在 CRAN 页面上看到它,或者使用 utils::packageDescription() 功能查看是否可以安装软件包。例如,

cat(utils::packageDescription("rgl")$SystemRequirements)
#> OpenGL, GLU Library, XQuartz (on OSX),
#> zlib (optional), libpng (>=1.2.9, optional), FreeType (optional),
#> pandoc (>=1.14, needed for vignettes; if not present,
#> markdown package will be used)

reprex package (v2.0.1)

于 2022-04-16 创建

在 CRAN 上,这显示在 https://cloud.r-project.org/web/packages/rgl/index.html 上。

许多软件包会测试它们的依赖项,并尝试提供有关如何在未找到依赖项时安装它们的依赖项的有用消息。其他人只是无法安装,有时会出现相当难以理解的错误消息。

这在 Windows 上更容易的原因是包的二进制版本可用于 Windows。 CRAN 的好人在他们自己的系统上找到并安装了大量的系统依赖项,然后使用它们来构建包的二进制版本,静态 link 所需的库。但是,有些包不能静态 link;他们需要在系统上安装库的 DLL。 Windows 用户可能很难安装这些。