【问题标题】:R package build failing on Unix machines due to missing GSL - GNU Scientific Library由于缺少 GSL,R 包构建在 Unix 机器上失败 - GNU 科学图书馆
【发布时间】:2018-03-07 23:01:33
【问题描述】:

我在R 包开发方面遇到了一个特别棘手的问题。我自己的包名为ggstatsplot (https://github.com/IndrajeetPatil/ggstatsplot),它依赖于userfriendlyscience,它依赖于另一个名为MBESS 的包,它本身最终依赖于另一个名为gsl 的包。在 Windows 机器上安装ggstatsplot 完全没有问题(由AppVeyor 持续集成平台评估:https://ci.appveyor.com/project/IndrajeetPatil/ggstatsplot)。

但是每当要在Unix机器上安装包时,它会抛出ggstatsplot无法下载的错误,因为userfriendlyscienceMBESS无法下载,因为@ 987654336@无法下载。在带有虚拟 Unix 机器的 Travis 持续集成平台上也发现了同样的情况,其中包构建失败 (https://travis-ci.org/IndrajeetPatil/ggstatsplot)。

现在为 Unix 机器上的用户解决此问题的一种方法是配置 GSL(如下所述: installing R gsl package on Mac),但我不能指望ggstatsplot 的每个用户都经历配置GSL 的艰巨过程。我希望他们只运行install.packages("ggstatsplot") 并完成它。

因此,如果有人能提供任何有用的建议,我将非常感激我如何通过从源头上消除这个问题来让我的包用户的生活变得更简单。我应该在包本身中包含一些东西来代表用户处理这个问题吗?

【问题讨论】:

  • 我认为情况并没有你想象的那么糟糕。 R gsl 包在 Mac 上以二进制形式提供,因此离开 Linux。 GSL 为大多数 Linux 发行版打包,例如,在 Ubuntu 上为 libgsl-devlibgsl2。因此,Mac 和 Windows 用户使用install.packages("ggstatsplot"),Linux 用户使用apt-get install libgsl-dev libgsl2,然后是install.packages("ggstatsplot")。这一切对我来说似乎都很典型。
  • @Ista 感谢您的意见,很高兴听到这不是我认为的那么大的问题。我个人不使用 Mac 或 Linux,所以这纯粹基于我用来检查包构建的 CI 平台,并且对 Mac 上的错误感到困惑,但在 Windows 上却没有。例如,install.packages("ggstatsplot") 适用于 Windows,但 适用于 Mac,我不知道为什么会这样。换句话说,为什么 Windows 用户不会面临与 Mac 和 Ubuntu 用户相同的问题。我已经要求使用 Mac 的同事安装我的包,但每次都失败,但在 Windows 上从来没有。
  • 我目前无法访问 Mac,但我会在访问时查看。我的假设是 Windows 用户没有问题,因为 CRAN 已经为他们构建了 R 包。这也适用于 Mac 用户,所以我希望它也能在那里工作。有空我会检查的。
  • 我在 Mac 上进行了检查,gsl 安装并运行良好。无需安装 GSL。
  • @Ista 感谢您的检查。是的,那是因为我昨晚根据下面发布的答案推动了一些新的变化。现在包安装在osx 上工作得很好,但在Linux (travis-ci.org/IndrajeetPatil/ggstatsplot) 上仍然存在问题。现在正在努力解决这个问题。

标签: r travis-ci gsl r-package


【解决方案1】:

通过更改您的 R 包,这可能没有令人满意的解决方案(我不确定哪种方式)。如果 gsl 包作者(包括前 R Core 成员)没有配置它来避免 linux 包的 pre-req 安装,那么可能有充分的理由不这样做。

但大多数 R+Linux 用户了解某些 R 软件包首先需要安装底层 Linux 库(例如,通过aptdnf/yum)可能是一些安慰.

主要问题:方便用户安装

尝试在 GitHub 自述文件和 CRAN INSTALL file 上超级清楚。 gsl 包有decent CRAN directions。这导致以下 bash 代码:

sudo apt-get install libgsl0-dev

我见过的清晰(linux pre-req 包)文档的最佳示例来自curlsf 包。 sfCRAN page 仅列出了 3 个库的人名,但 GitHub page 提供了三个主要分发分支的确切 bash 命令。 curl 包也做得很好(例如,CRANGitHub)。例如,它提供了以下解释和 bash 代码:

在 Linux 上从源代码安装需要 libcurl。在 DebianUbuntu 上使用 libcurl4-openssl-dev:

sudo apt-get install -y libcurl-dev

理想情况下,您的文档将描述如何在多个发行版上安装 gsl linux 软件包。

免责声明:我从未开发过直接需要 Linux 软件包的软件包,但我经常使用它们。如果更多示例会有所帮助,this doc 包含一个我用来在新 Ubuntu 机器上安装东西的脚本。一些命令在包文档中明确说明;有些人几乎没有文档,需要研究。

编辑 2018-04-07: 我遇到了我最喜欢的新示例:sys package 使用config 文件在 R 控制台中生成以下消息。在新计算机上安装 100 多个包时,很高兴看到这条直接消息,并且不必追踪 R 包及其依赖项的文档。

在 Debian/Ubuntu 上,此软件包需要 AppArmor。

请运行:sudo apt-get install libapparmor-dev

另一个不错的是pdftools,它也使用config 文件(也是由Jeroen Ooms 开发的)。

次要问题:在 Travis 上安装

userfriendly travis config file 显然直接安装了很多二进制文件(包括gsl),不像current ggstatsplot version

另外,我更熟悉告诉 travis 安装 linux 包,如 curl's config file 所示。作为奖励,这可能更接近地复制了典型用户在他们自己的机器上所做的事情。

addons:
  apt:
    packages:
    - libcurl4-openssl-dev

跟进 2018-03-13 Indrajeet 和我调整了 travis 文件,使其正常工作。 yaml文件中的Two sections were changed

  1. libgsl0-dev 条目已添加到 packages 部分下(类似于上面的 libcurl4-openssl-dev 条目)。
  2. 软件包在r_binary_packages 部分中列出,因此它们作为二进制文件安装。构建在 50 分钟后超时,现在不到 10 分钟。在这个特定的包中,r_binary_packages 部分嵌套在 Travis 矩阵的 Linux 部分中,因此它不会干扰他在 Travis 上的两个 OS X 作业。

【讨论】:

  • 非常感谢您的详细回答以及大量文档的链接! curl 包的 travis.yml 文件特别有用。安装现在适用于 osx,但对于 linux 机器 (travis-ci.org/IndrajeetPatil/ggstatsplot),构建仍然失败。现在正在想办法解决这个问题。
  • 我认为 linux 构建现在正在运行,但由于以下错误,它仍然没有成功 (travis-ci.org/IndrajeetPatil/ggstatsplot/jobs/351456750) - The job exceeded the maximum time limit for jobs, and has been terminated. 关于如何解决这个问题的任何想法?
  • 这些说明做了一些事情,但没有导致安装 GSL 可以通过 r 包gsl 找到。当我按照stackoverflow.com/questions/69583193/… 的说明进行操作时,一切顺利,GSL 出现在 gsl 可以找到的位置。
猜你喜欢
  • 1970-01-01
  • 2013-10-31
  • 2014-12-17
  • 2023-03-31
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多