R中的依赖管理

yon*_*oni 13 dependencies r package

R是否有依赖项管理工具来促进项目特定的依赖项?我正在寻找类似于Java的maven,Ruby的捆绑器,Python的virtualenv,Node的npm等等.

我知道DESCRIPTION文件中的"Depends"子句以及R_LIBS工具,但这些似乎不能协同工作以提供一些非常常见的工作流程的解决方案.

我基本上希望能够检查一个项目并运行一个命令来构建和测试项目.该命令应将任何所需的包安装到特定于项目的库中,而不会影响全局R安装.例如:

my_project/.Rlibs/*
Run Code Online (Sandbox Code Playgroud)

Dir*_*tel 7

不幸的是,Depends:DESCRIPTION:文件中你得到的只是以下原因:

  • R本身是合理的跨平台,但这意味着我们需要跨平台和操作系统
  • 编码取决于:除了R软件包之外,还要求以可移植的方式对操作系统进行编码 - 运气编码即使是简单的东西,例如"PNG图形库",其方式可以在系统中明确地解决
  • Windows没有包管理器
  • AFAIK OS X没有包管理器,它混合了Apple发布的内容和其他开源项目提供的内容
  • 即使在Linux发行版中,也没有一致性:只需将RStudio作为一个示例,它包含两个包(它们都提供了它们的依赖项!),用于RedHat/Fedora和Debian/Ubuntu

这是一个难题.

  • 对于那些只是在没有发表评论的情况下谦恭有礼的人:*你做错了*.只有通过评论我们才能进行讨论,每个人都可以学习.随机驱逐下来对任何人都没有帮助. (4认同)

yon*_*oni 5

作为一个权宜之计,我写了一个新的rbundler软件包.它将项目依赖项安装到项目特定的子目录(例如<PROJECT>/.Rbundle)中,允许用户避免使用全局库.

我们已经rbundler在Opower上使用了几个月,并且已经看到内部软件包的开发人员工作流程,可测试性和可维护性方面的巨大改进.结合我们的内部软件包存储库,我们能够稳定十几个软件包的开发,以便在生产应用程序中使用.

常见的工作流程:

  • 从github查看一个项目
  • cd进入项目目录
  • 火了R
  • 从R控制台:

    库(rbundler)

    束('.')

将安装所有依赖项./.Rbundle,并.Renviron使用以下内容创建文件:

R_LIBS_USER='.Rbundle'
Run Code Online (Sandbox Code Playgroud)

从此项目目录中运行的任何R操作都将遵循项目特定的库和包依赖项.请注意,虽然此方法使用包描述来定义依赖项,但它不需要具有实际的包结构.因此,rbundler无论是简单的脚本还是成熟的软件包,它都成为管理R项目的通用工具.

  • 谢谢你带来了这个,@ jhin.在我开始开发`rbundler`的时候,我和@hadley以及RStudio的人谈过这个问题.不同之处在于`rbundler`专注于_package_开发,并利用`DESCRIPTION`文件中的显式依赖关系,而`PackRat`专注于一般项目开发,并通过反射派生您的依赖关系.PackRat具有一些额外的功能来快照您的依赖项,以便于部署和共享.我认为这是他们作为管理托管项目的解决方案的首要任务. (4认同)
  • 乍一看,在我看来,这正是PackRat(http://rstudio.github.io/packrat/)所做的,最近由RStudio团队发布.我错了吗? (2认同)

Gui*_*ume 5

packrat软件包正是为了实现以下目标:

在不影响全局 R 安装的情况下将任何必需的包安装到特定于项目的库中

它允许在不同的项目本地包库中安装相同包的不同版本。

尽管这个问题已经有 5 年历史了,但我还是要添加这个答案,因为在提出问题时这个解决方案显然还不存在(据我所知,packrat2014 年首次出现在 CRAN 上)。

更新(2019 年 11 月)

新的 R 包renv取代了packrat.