2017-05-24 38 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用戶都同意:使用軟件包並使用軟件包庫是必然結果。 –