【问题标题】:Using R package source files in packrat (rather than CRAN) with Travis-CI使用带有 Travis-CI 的 Packrat(而不是 CRAN)中的 R 包源文件
【发布时间】:2016-08-18 03:35:56
【问题描述】:

我正在使用R package that is an RStudio project,并且我正在使用 packrat 来保存我的项目所依赖的包源的本地副本。

我每次提交时都会得到Travis-CI checking my R package,但每次Travis 构建我的包时,它都会获取最新版本的依赖包,而不是我在packrat/ 目录中的版本。

我可以在richfitz/wood 中看到他似乎已经在他的.travis.yml 文件中实现了这个目标:

env:
 USE_PACKRAT=1

还有一个相当复杂的make/packrat.mk 文件,它可以让一切正常工作。

我的问题是配置我的项目(例如我的 .travis.yml 文件)以告诉 Travis 机器从我在 github 上的 packrat/ 目录而不是从 CRAN 获取包的最简单方法是什么?

【问题讨论】:

    标签: r travis-ci packrat


    【解决方案1】:

    经过多次反复试验和进一步阅读,似乎可以做到这一点,.travis.yml 文件如下:

    # R for travis: see documentation at https://docs.travis-ci.com/user/languages/r
    
    language: R
    sudo: false
    cache: packages
    install:
      - R -e "0" --args --bootstrap-packrat
    warnings_are_errors: false
    

    上述文件中的关键行是:

    install:
      - R -e "0" --args --bootstrap-packrat
    

    这将启动 R,并在本地 packrat 目录中构建 R 包,以便它们在 Travis 机器中可用。

    之后,travis 将继续并尝试构建包,并且不需要联系 CRAN 来获取依赖项,因为它们已经可用(假设 packrat 按预期工作)。

    我在这里发现了这个技巧:https://travis-ci.org/ChowHub/paper-pattern-similarity/builds/127262823https://github.com/rstudio/packrat/issues/158。我已经在这里工作了:https://travis-ci.org/benmarwick/mjbtramp/builds/157747326

    这样做的优势是我们可以使用我们在本地使用的完全相同的包在 travis 上构建。当我们在 travis 上构建时,我们不必从 CRAN 获取最新的包,现在我们可以更好地控制 travis 在我们的项目中构建的包版本。

    缺点是 travis 的构建时间大大增加。切换到 Packrat 后,我​​的一个项目从 2-3 分钟缩短到 13-15 分钟。


    更新在下面 Noam 的问题和 Jim's comment 之后,似乎我们可以像这样使用 cache: 缓存 Packrat 包:

    # R for travis: see documentation at https://docs.travis-ci.com/user/languages/r
    
    language: R
    sudo: false
    cache:
      directories: $TRAVIS_BUILD_DIR/packrat/
      packages: true
    install:
      - R -e "0" --args --bootstrap-packrat
    warnings_are_errors: false
    

    在我的用例中,这大大减少了时间,回到 1-2 分钟。

    【讨论】:

    • 这么长的构建时间会持续吗?还是第一次构建后缓存的包?
    • 问得好,是的,似乎使用 Packrat 的时代是稳定而高涨的。这是我的用例构建摘要:travis-ci.org/benmarwick/mjbtramp/buildsone build where I turned off packrat 专门用于查看时间不到 2 分钟,其余时间使用 Packrat,13-18 分钟。缓存从 packrat 构建的包可能会有所帮助!
    • 可以缓存!我已经更新了我的答案以显示如何
    • 只是一个小警告:上面的缓存方法,它大大减少了构建时间(是的!)不会自动失效,当 Packrat 依赖项(因此 packrat.lock)改变。因此,无论何时您从 Packrat 添加/更新/删除一个包,只要缓存打开,Travis 就不会知道这一点。您已手动删除缓存并重新构建以修复此问题。我提出了issue
    • 在此问题上正在进行的工作也记录在这里:github.com/rstudio/packrat/issues/352(感谢@maxheld!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2020-05-14
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多