2017-05-24 37 views
2

我有本地存储的私有软件包(通过SVN进行版本控制)。为了安装这个软件包,我要求用户通过SVN更新他/她的软件包目录,然后在目录上setwd(),然后devtools::install()导入的软件包不会自动安装

此软件包导入许多CRAN软件包,这些软件包不存储在本地。这些导入的软件包在安装过程中不会自动安装,这会产生错误消息Dependency package foo not available。必须手动安装install.packages('foo'),然后再次尝试,只得到Dependency package bar not available用户,令人作呕,即使foobar是我Imports:

细节之中:

我的描述文件看起来像:

Package: apackage 
Type: Package 
Title: Package to Do Stuff 
Version: 1.11111 
Date: 2017-03-02 
Author: C8H10N4O2 
Maintainer: C8H10N4O2<[email protected]> 
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'),然后他/她得到另一个依赖项不可用的错误。

我曾尝试:

根据R packages

Imports: packages listed here must be present for your package to work. In fact, any time your package is installed, those packages will, if not already present, be installed on your computer (devtools::load_all() also checks that the packages are installed).

我还检查Writing R Extensions但找不到任何有关这个主题的人。

我是否正确,这些包应该自动安装,我应该怎么做才能确保它们自动安装?

我认识到问题不是完全可重现的,但我无法链接到我的回购,因此我很乐意提供任何其他详细信息。

**versions** 
R 3.4.0, platform = x86_64-w64-mingw32 
devtools 1.13.1 
+1

你设置上有一个私人包你自己的仓库?您的存储库是否也包含软件包的依赖关系?通常'安装。包('foo')'将从CRAN安装,但你似乎在这里做别的事情。你究竟如何配置他们的R工作空间来完成这个工作? – MrFlick

+0

@MrFlick是的,我正在使用我自己的SVN仓库作为我的包。它不包含我导入的软件包。我会更新这个问题。感谢您的关注。 – C8H10N4O2

回答

1

您正在用R改造包装。我建议不要。你可以只需drat来创建一个存储库。这是尝试和真实和工程

部署方面,对于生产本地包以及他们使用和安装是完全正交到你保留来源。不要将源代码存储库误认为代码分发机制。

总之,在本地使用drat以及本地GitHub Enterprise实例在我们工作中一直在为我们工作,drat一般在相当广泛的使用。

(大多数免责声明我是谁开始drat的一个,但我有一堆贡献者过的好运气。)

+0

感谢您的建议,尽管它并没有真正回答我目前的问题。我完全不熟悉drat。除了依赖问题之外,从SVN更新软件包目录并从那里构建对我们的小团队来说非常有效。差异使得理解提交之间的变化非常容易。你可以详细说明一下你的意思吗“不要误解代码分发机制的源代码库吗? – C8H10N4O2

+1

是的,我之前已经回答过;请参阅drat上的四个小插件以及其他问题。 package()'为你提供依赖关系。从SVN安装“工作”以获得各种工作定义,但是效果很差。几乎所有经验丰富的R用户都同意:使用软件包并使用软件包库是必然结果。 –