【问题标题】:Automatically install dependent libraries for a self-made package为自制包自动安装依赖库
【发布时间】:2016-12-08 12:28:42
【问题描述】:

我有一个关于如何在从源代码安装自制包时自动安装依赖库的问题。

基本上,DESCRIPTION 文件看起来像:

Package: mypackage
Type: Package
Title: mypackage_title
Version: 0.1.0
Author: test 
Maintainer: test <test @example.com>
Description: More about what it does (maybe more than one line)
Depends:
    dplyr, 
    stringr
License: MIT
LazyData: TRUE
RoxygenNote: 5.0.1

我关注guide 并创建了一个.tar.gz 文件。当我分发此软件包时,用户将从源代码安装。此外,我期望从这个源安装中,如果这两个不可用,将自动安装诸如dplyrstringr 之类的依赖库。

我在虚拟机中进行了测试,但遇到了以下错误。那么对这个问题有什么建议吗?提前致谢!

install.packages("path_to_my_tar.gz", repos=NULL, type="source")
Error: dependencies 'dplyr', 'stringr' are not available for package

更新:我尝试了其他几种方法,但仍然失败...

方法一

install.packages("path/to/my/package", repos = NULL, type = "source")
ERROR: dependencies 'dplyr', 'stringr' are not available for package 

方法2:将my packagedplyrstringr放入path/to/my/package/folder

install.packages("path/to/my/package", repos =  "path/to/my/package/folder/", type = "source")
Warning in install.packages :
  unable to access index for repository path/to/my/package/folder/src/contrib:
  scheme not supported in URL 'path/to/my/package/folder/src/contrib/PACKAGES'
Warning in install.packages :
  my packageis not available (for R version 3.3.1)

方法 3:使用 contriburlmy packagedplyrstringr 放入 path/to/my/package/folder

install.packages("path/to/my/package", contriburl = "path/to/my/package/folder/", type = "source")
Installing package into my package (as lib?is unspecified)
Warning in install.packages :
  unable to access index for repository path/to/my/package/folder/:
  scheme not supported in URL 'path/to/my/package/folder/PACKAGES'
Warning in install.packages :
  my package is not available (for R version 3.3.1)

方法四:

install.packages("ProdComp08032016_0.1.2.tar.gz", repos = c("file://C:/Users/TH2/Downloads/", "http://cran.us.r-project.org"), type = "source") 安装包到:/Users/TH2/Documents/R/win-library/3.3?(因为ib?未指定) install.packages 中的警告: 无法打开压缩文件'//C:/Users/TH2/Downloads/src/contrib/PACKAGES',可能的原因'没有这样的文件或目录' install.packages 中的错误:无法打开连接

方法5:

install.packages("ProdComp08032016_0.1.2.tar.gz", repos = c("C:/Users/TH2/Downloads/", "http://cran.us.r-project.org"), type = "source") 安装包到:/Users/TH2/Documents/R/win-library/3.3?(因为ib?未指定) install.packages 中的警告: 无法访问存储库 C:/Users/TH2/Downloads/src/contrib 的索引: URL 'C:/Users/TH2/Downloads/src/contrib/PACKAGES' 中不支持方案 install.packages 中的警告: 包rodComp08032016_0.1.2.tar.gz?不可用(适用于R版本3.3.1)

【问题讨论】:

  • 澄清一下;你的虚拟机有一个配置好的互联网连接,它可以安装上述依赖项?如果您尝试从构建机器上的.tar.gz 安装它会发生什么?
  • @JonathanCarroll,正确。虚拟机有互联网连接。同样的安装方法适用于我之前安装过dplyrstringr 的构建机器。
  • 基本解决方案:在install.packages("path_to_my_tar.gz", repos=NULL, type="source") 之前运行install.packages(c("dplyr", "stringr"))。当您将新的依赖项添加到您的包时,您需要更新 install.packages() 调用,但这应该没问题。

标签: r r-package


【解决方案1】:

编辑

根据这个重复的问题,Package dependencies when installing from source in R,命令

install.packages(pkgs = my.package.name, repos = c("file://path/to/my/custom/repo", "http://cran.somepage.org"))

如果你create a local R repository,就可以工作了。

另一种选择是将包制作成GIT项目并使用

devtools::install_local("path/to/package.tar.gz")

我没有准备好测试的包,但我的猜测是 repos = NULL 螺丝 install.packages 正在寻找你的包的依赖项。

查看?install.packages 看起来你运气不好,没有将你的依赖项也放在本地存储库中:

参数

pkgs 当前版本的包名称的字符向量 应该从存​​储库下载。如果 repos = NULL,则 包含二进制文件的“.zip”文件的文件路径的字符向量 包的构建。 (http:// 和 file:// URL 也被接受,并且 这些文件将从本地副本下载和安装。)来源 档案的目录或文件路径或 URL 可以用 type = "source",但有些包需要安装合适的工具(见 “详细信息”部分)。如果缺少此字符或长度为零的字符 向量,在可能的情况下显示可用包的列表框 一个交互式 R 会话。
lib 提供库的字符向量 安装软件包的目录。根据需要回收。如果 缺少,默认为 .libPaths() 的第一个元素。
repos 字符向量,要使用的存储库的基本 URL,例如, CRAN 镜像的 URL,例如“http://cran.us.r-project.org”。为了 有关支持的 URL 方案的更多详细信息,请参见 url。可以为NULL来安装 从本地文件、目录或 URL:这将由 如果长度为 1,则从 pkgs 扩展。

这是我的两个猜测:

install.packages(pkgs = "package", ..., repos = c("file://path.to.tar.gz", "http://path.to.cran.mirror")) # Try to specify the path to your package as another repo
install.packages(pkgs = "file://path.to.tar.gz.file") # Leave repos alone and hope the file:// suffices

请让我知道它们是否有效:)

【讨论】:

  • 所以您建议我应该将我的两个依赖包(dplyrstringr)放入我的分布式 R 包中,然后将它们的路径列为 repo 的一部分?是否可以使用 URL 进行本地安装?
  • @tao.hong 我希望这两个调用之一能够在不手动下载dplyrstringr 的情况下工作,但根据文档,将依赖项放入同一个文件夹似乎唯一支持的方式。
  • @AlexR我尝试了你建议的方法,但仍然失败......详情在更新中。
  • @tao.hong 看起来您在 path/to/package/folder 之前省略了 file:// 说明符。请注意重试,因为文档特别提到方法 3 将适用于 file://?...
  • @TH339 在 windows 下我似乎需要使用三个斜杠而不是两个并且没有驱动器号冒号:file:///C/...
【解决方案2】:

没有保证,但也许

devtools::install_local("path_to_my_tar.gz")

如果还不行,试试dependencies=TRUE?

【讨论】:

  • 感谢您的建议。测试了这两个建议,但没有运气......对于devtools 方法,我在'path_to_my.tar.gz' 处收到以下错误Error in git2r::discover_repository(path, ceiling = 0) : Error in 'git2r_repository_discover': The .git` 文件格式错误'
  • 我不知道为什么它会沿着这条路开始,所以现在我不得不问 - 你是如何创建 .tar.gz 源文件的?
  • 我在 Rstudio 中通过点击 Build Source Package 到它的 GUI 构建它
  • @TH339 您在 RStudio 中使用Build Source Package 创建的存档文件只能使用install.packages("packagename.tar.gz", repos = NULL, type="source") 安装。要使用devtools::install_local(),您需要在构建包之前提供开发包的文件夹。然后你可以运行devtools::install_local("path_to_the_package_creation_folder")
  • @PaulRougieux,我明白了。感谢您提供解决方案,使用 install.packages("packagename.tar.gz", repos = NULL, type="source") 有一段时间了,但会考虑您建议的第二种方法。
猜你喜欢
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 2021-06-12
相关资源
最近更新 更多