【问题标题】:circular dependency error in R package check, yet no circular refs in DependsR包检查中的循环依赖错误,但Depends中没有循环引用
【发布时间】:2022-01-14 00:35:34
【问题描述】:

运行 CHECK 时,我的 R 包出现循环依赖错误:

checking package dependencies ... ERROR
  There is circular dependency in the installation order:
    One or more packages in

然后是一长串包。

但是,DESCRIPTION 中的 Depends 类别非常少:

Depends: methods, R (>= 3.5.0), magrittr

所有其他引用的包都在 Imports 或 Suggests 中。我在 Imports 中拥有的一个包也在他们的 Imports 中列出了我的包,但我认为这不会导致依赖问题。我不认为我在DESCRIPTION中的任何其他软件包都在他们的列表中。

我在网上搜索了很多,但没有找到相关的解决方案。有任何想法吗?提前感谢您的建议。

会话信息:

R version 4.0.5 (2021-03-31)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 10.16

Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_4.0.5 tools_4.0.5    tinytex_0.31   xfun_0.28     

【问题讨论】:

  • 嗯,“我在 Imports 中拥有的一个包也在他们的 Imports 中列出了我的包”对我来说听起来确实像是一个循环依赖。你的包是在 github 上还是在我们可以查看并自己测试的地方?没有reproducible example 就很难提供帮助。
  • 感谢您的评论。我的包裹在这里:github.com/jamiemkass/ENMeval>。包不是一直相互导入吗?我在我的代码(pkg::func)中使用显式引用,所以我从不完全加载任何引用的 pkg,特别是为了避免这种情况。如果我在这里遗漏了一些要遵循的协议,请通知我!
  • 依赖和导入都需要依赖。主要区别在于导入不会将项目添加到用户的搜索路径。请参阅herehere。你不能在你的“imports”下列出一个包,在他们的“imports”下列出你——这部分与“depends”相同。包一直使用包中的功能,但共享只是一种方式。如果两个包不能相互独立存在,那么它们应该是同一个包。
  • 再次感谢。我理解,但是当另一个包使用我的函数时,我该如何使用另一个包中的函数?这些软件包有不同的作者,因此它们不太可能被合并(并且在方法上没有意义)。我唯一的选择是将它们的功能直接集成到我的包中并列出属性等吗?
  • 当然,一种选择是复制函数(有权限)。当其他包发生这种情况时,他们通常会将共享逻辑移动到单独的包中,然后两个包都可以导入该帮助包。如果它是您不真的需要的功能,您可以将其移至建议,然后检查该软件包是否已安装,如果没有则抛出错误。

标签: r package dependencies circular-dependency


【解决方案1】:

Depends 和 imports 都需要依赖。主要区别在于导入不会将项目添加到用户的搜索路径。请参阅herehere。你不能在你的“imports”下列出一个包,在他们的“imports”下列出你——这部分与“depends”相同。包一直使用包中的函数,但共享只是单向的。

一种可能的解决方法是将函数(在其他包作者的许可下)复制到您自己的包中。

我看到其他包使用的另一个选项是将共享逻辑移动到单独的帮助程序包,然后两个包都可以导入该帮助程序包。

最后,如果它是您并不真正需要的功能,您可以将其移至建议,然后仅在您需要该功能时检查是否安装了该软件包,如果没有则可能引发错误。

【讨论】:

  • 非常感谢您的帮助!请参阅上面的 cmets 进行讨论和解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 2022-09-22
  • 2016-06-09
  • 1970-01-01
相关资源
最近更新 更多