我有一个本地存储的私有包(并通过SVN进行版本控制) . 要安装软件包,我要求用户SVN更新他/她的软件包目录,然后在目录上更新 setwd()
,然后 devtools::install()
.
此程序包导入许多CRAN程序包,这些程序包不存储在本地 . 这些导入的包在安装过程中不会自动安装,从而产生错误消息 Dependency package foo not available
. 用户必须手动安装 install.packages('foo')
,然后重试,只是为了得到 Dependency package bar not available
,令人作呕,即使 foo
和 bar
属于我的 Imports:
Details:
我的DESCRIPTION文件看起来像:
Package: apackage
Type: Package
Title: Package to Do Stuff
Version: 1.11111
Date: 2017-03-02
Author: C8H10N4O2
Maintainer: C8H10N4O2<C8H10N4O2@example.com>
Description: Package that does many useful things
License: file LICENSE
Depends:
R (>= 3.3.0)
Imports:
bit64 (>= 0.9.5),
data.table (>= 1.9.6),
extrafont (>= 0.17),
foreach(>= 1.4.3),
ggplot2 (>= 2.0.0),
gbm (>= 2.1),
grid (>= 3.2.3),
gridExtra (>= 2.0.0),
httr (>= 1.1.0),
readxl (>= 0.1.1),
scales (>= 0.4.0),
xlsx (>= 0.5.7)
LazyData: true
RoxygenNote: 5.0.1
Suggests: testthat (>= 0.9.1)
但是在调用 check()
或 load_all()
时,我仍然收到错误:
Error in (function (dep_name, dep_ver = NA, dep_compare = NA) :
Dependency package gridExtra not available.
然后我的用户必须 install.packages('gridExtra')
,然后他/她得到另一个依赖不可用的错误 .
What I have tried:
根据R packages:
导入:此处列出的软件包必须存在才能使您的软件包正常工作 . 事实上,无论何时安装软件包,这些软件包(如果尚未安装)都将安装在您的计算机上(devtools :: load_all()还会检查软件包是否已安装) .
我还检查了Writing R Extensions但在这个主题上找不到任何其他内容 .
我是否正确,这些软件包 should 是自动安装的,我该怎么做才能确保它们自动安装?
我认识到这个问题不是完全可以重现的,但我无法链接到我的回购,所以我很乐意提供任何其他细节 .
**versions**
R 3.4.0, platform = x86_64-w64-mingw32
devtools 1.13.1
1 回答
你正在用R重塑包装 . 我建议反对 . 你可以只drat来创建一个存储库 . 这是尝试和真实的,并且有效 .
对于本地软件包的 生产环境 以及它们的使用和安装而言,这种部署方面与保存源的位置完全正交 . 不要将源代码存储库误认为代码分发机制 .
总而言之,在本地使用drat以及本地GitHub Enterprise实例在我们的工作中为我们工作,并且drat一般使用相当广泛 .
(通常的免责声明就像我开始drat,但我也有很多贡献者的好运 . )