【问题标题】:Required packages are not auto-installed所需的软件包不会自动安装
【发布时间】:2018-09-14 16:45:25
【问题描述】:

我创建了我的第一个 R 包并有一个问题。

该软件包在我的计算机上成功运行。但是,如果我的用户(没有所需的包)运行我的包,他们将收到错误消息,指出所需的包不可用。当他们从 CRAN 手动安装该软件包时,我的软件包就可以工作了。

根据 Hadley Wickam 的书 (http://r-pkgs.had.co.nz/description.html):

导入:此处列出的软件包必须存在,您的软件包才能正常工作。事实上,无论何时安装你的包,这些包(如果还没有的话)都会安装在你的计算机上(devtools::load_all() 也会检查这些包是否已安装)。

我将所有必需的包放在 DESCRIPTIONImports 字段中。为什么没有自动安装所需的软件包?我的用户在使用我的之前需要安装所有必需的软件包吗?

其他背景:

  1. 我在脚本中使用约定 package_name::function_name
  2. 我将包分发为二进制包。
  3. 用户从他们的本地目录安装包,所以他们 调用 install.packages 时无法指定 DEPENDENCIES=TRUE。

我做了什么:

  1. 阅读 Hadley Wickham 的书 R Packages
  2. 读取 Imported packages do not auto-installR package dependencies 但没有找到任何关于我的问题的信息。

谢谢!

【问题讨论】:

  • 所以你的包不是从 CRAN 或 GitHub 安装的?
  • 您链接的问题about imported packages not auto-installing 似乎几乎完全相同。 install.packages 将在指定的存储库中查找要安装的依赖项。如果您只是让用户在本地安装,则没有存储库,也没有安装依赖项。如果您不想处理 CRAN,Dirk 建议使用他的包 drat 创建您自己的包含所有依赖项的小型存储库。
  • 这:“无论何时安装您的软件包,这些软件包(如果尚未存在)将安装在您的计算机上”通常不是真的。要么是哈德利在写这句话时的想法有误,要么(更有可能)你没有对该语句的上下文给出完整的描述。您需要采取特定步骤来安装依赖项。 install.packages 中有一个“依赖项”参数,但我怀疑 Hadley 正在使用一些特殊用途的功能,其部署在该文本摘录的上游。
  • Dason,是的,它是在我们的团队中使用的。所以我一直通过电子邮件分发它。我们的下一个计划是将其托管在闪亮的服务器上。
  • 格雷戈,谢谢!是的,它们几乎相同。我想知道除了使用 drat 是否还有其他方法可以做到这一点。谢谢。

标签: r r-package


【解决方案1】:

刚刚发现依赖项没有安装,因为我的包不是从 CRAN repo 安装的。

使用devtools::install_local("pkgname.tar.gz") 将安装包和任何依赖项。

【讨论】:

    【解决方案2】:

    你可以尝试使用

    devtools::install_deps()
    

    devtools::install_deps("pkg_version.tar.gz")
    

    然而,这个函数似乎有一些问题,c.f. https://github.com/r-lib/devtools/issues/1370

    替代方法是使用链接问题中建议的drat

    【讨论】:

    • 谢谢!但是,我认为这不会起作用,因为我的用户是有问题的。我(开发人员)没有。作为我的包的用户,他们无法运行该命令来解决问题。
    • @Ketty 您的用户也可以在包存档上使用此功能,例如devtools::install_deps("<archive>")。他们只需要安装devtools。如果这不是一个选项,那么您仍然可以使用drat 存储库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2015-08-07
    • 2020-12-03
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多