【发布时间】: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,特别是为了避免这种情况。如果我在这里遗漏了一些要遵循的协议,请通知我!
-
再次感谢。我理解,但是当另一个包使用我的函数时,我该如何使用另一个包中的函数?这些软件包有不同的作者,因此它们不太可能被合并(并且在方法上没有意义)。我唯一的选择是将它们的功能直接集成到我的包中并列出属性等吗?
-
当然,一种选择是复制函数(有权限)。当其他包发生这种情况时,他们通常会将共享逻辑移动到单独的包中,然后两个包都可以导入该帮助包。如果它是您不真的需要的功能,您可以将其移至建议,然后检查该软件包是否已安装,如果没有则抛出错误。
标签: r package dependencies circular-dependency