繁体   English   中英

具有可选依赖项的 CRAN 包

[英]CRAN package with an optional dependency

我构建了一个 R 包,它的一些函数使用了V8包。 但是有些平台不支持V8 ,所以我想把这些功能只在支持V8的平台上可用。 如何处理这种情况? 我可以将V8放在DESCRIPTIONSuggests字段中而不是Imports字段中,并测试它是否可用requireNamespace ,但是我如何处理必须从V8导入的函数? 我想将此包提交给 CRAN。

我通过复制reactR包使用的方式找到了解决方案。

  • V8放在Suggests字段中。

  • 不要在NAMESPACE导入V8或其函数; 使用V8::...来使用V8功能。

  • 在需要V8的函数中,使用requireNamespace检查是否存在V8 ,如果不存在则抛出消息或错误:

     if(!requireNamespace("V8")){ message("This addin requires the 'V8' package.") return(invisible()) }

我运行了R CMD CHECK ,它没有抱怨。

我认为最干净的解决方案是有两个包。 第一个包 ( A ) 将包含所有不依赖(直接或间接)依赖于V8 第二个包 ( B ) 将取决于A并包含所有需要V8代码。


                              +-------+
                              |       |
                              |  V8   |
                              |       |
                              +---^---+
                                  |
                                  | Requires
                                  |
         +-------+            +---+---+
         |       |            |       |
         |  A    <------------+  B    |
         |       |  Requires  |       |
         +-------+            +-------+

在支持V8平台上,用户可以使用B而在所有其他平台上,用户可以使用A

套餐A可以Suggest套餐B

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM