【发布时间】:2021-11-18 04:15:59
【问题描述】:
在开发 R 包时,我们使用DESCRIPTION 文件列出包依赖项(例如,在“导入”部分中),并且我们可以通过后缀指定每个包依赖项所需的最小版本与“(> = x.x.x)”。但是,指定最大版本的类似功能是什么?
一些上下文
有时,我们所依赖的外部包在发布时带有重大更改,这些更改可能不再与正在开发的包兼容。每次使用重大更改更新外部包时更新我们的包是不可持续的。
示例
假设我正在开发一个名为“MarksPackage”的 R 包,它依赖于“dplyr”。到目前为止,我构建的所有内容都适用于 dplyr v1 的当前状态。但是,明天 dplyr v2 将发布 重大更改,这些更改会影响我的包。对于正在安装我的软件包的新用户,可能已经安装了最新的 dplyr v2,因此 MarksPackage 对他们不起作用。 每次 dplyr 通过重大更改更新时,我不一定想要或能够去更新我的包。我宁愿指定一个最大版本,甚至是一个版本范围,我知道 MarksPackage 可以工作。
如何在说明文件中完成此操作?有没有这样的语法:
Package: MarksPackage
Imports:
dplyr (>= 0.8.5 & <=1.2.0),
dbplyr,
tidyr (<= 1.0.2)
【问题讨论】:
-
我认为一般来说较新的软件包不应该损坏。这就是该测试的目的,声明为已弃用等,不是吗?如果有重大更改,更改您的包(例如删除依赖项)是恕我直言的方法。
-
我同意@KarstenW。关于最佳实践;你应该与时俱进。但是,我对下面问题的技术“如何”部分有一个答案,而没有涉及“应该”部分(你应该做什么)
-
@KarstenW。我知道你来自哪里,我通常同意。然而,我们的组织有一种有趣的工作方式,虽然这可能不是最佳实践,但我们在一个特定的实例中需要这种能力(因此我尝试用我的上下文部分来证明它的合理性)。例如,我们大致知道,一旦我们内部开发了这个包,它就不会再被触及,所以我真的希望它是“设置它并忘记它”,并保证它对未来的用户来说会一清二楚如何创建一个可以保证工作的环境。