错误:“rjags”的包或命名空间加载失败
Posted
技术标签:
【中文标题】错误:“rjags”的包或命名空间加载失败【英文标题】:Error: package or namespace load failed for 'rjags' 【发布时间】:2020-10-13 00:57:45 【问题描述】:在我的终端 conda 环境之一中,我能够成功安装包“rjags”。但是,当我在该环境中运行 R 并运行 library(rjags) 时,出现以下错误:
加载所需的包:尾错误:'rjags' 的包或命名空间加载失败:'rjags' 的 loadNamespace() 中的 .onLoad 失败,详细信息:调用:dyn.load(file, DLLpath = DLLpath, ...)错误:无法加载共享对象'/user-path/anaconda3/envs/r-env/lib/R/library/rjags/libs/rjags.so':/user-path/anaconda3/envs/r-env/lib /R/library/rjags/libs/rjags.so:未定义符号:_ZN4jags7Console10setRNGnameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj 另外:警告消息:1:包 'rjags' 是在 R 版本 3.6.3 下构建的 2:包'coda' 是在 R 版本 3.6 下构建的。 3
如果我安装并使用 R,在另一个环境或基础环境中执行 library(rjags),一切正常。我想知道这个错误消息是什么意思以及如何解决它。
conda list "^(libstdcxx-ng|r-base|r-coda|jags|r-rjags)$"
的输出为:
# packages in environment at /user-path/anaconda3/envs/r-env:
#
# Name Version Build Channel
jags 4.3.0 h26a2512_0 conda-forge
libstdcxx-ng 9.1.0 hdf63c60_0
r-base 3.6.1 h9bb98a2_1
r-coda 0.19_3 r36h6115d3f_2 conda-forge
r-rjags 4_10 r36h0357c0b_1 conda-forge
【问题讨论】:
您能否在问题中添加一些有关 env 的详细信息?我认为以下输出将是其他人尝试复制该问题的最低要求:conda list "^(libcxx|r-base|r-coda|jags|r-jags)$"
@merv 当然,我把输出放在上面
这是linux平台?如果是这样,请注意检查这个而不是我以前的设置:conda list "^(libstdcxx-ng|r-base|r-coda|jags|r-rjags)$"
@merv 是的,这是 linux。我已更新上述内容以反映更改。
谢谢,这很有帮助,我能够重现错误。
【参考方案1】:
频道混合出错
我怀疑错误是由mixing of Conda Forge and Anaconda packages 引起的。这些组织使用不同的构建堆栈,因此他们构建的动态库最终可能具有不同的内部定义(有关详细信息,请参阅this Issue on the Conda Forge repository)。例如,在这种情况下,rjags.so
被构建为在它链接到的库中查找符号,但它无法在 Anaconda 构建中找到它。不幸的是,它链接到太多(请与 ldd rjags.so
联系),我无法追踪具体是哪一个导致了问题。
但是,您仍然有一些选项可以让 rjags
正常工作,但不是精确修复。在所有情况下,解决方案是优先考虑 conda-forge 渠道。
选项 1:创建一个新的专用环境
如果您在此特定环境中实际上不需要rjags
,则使用您需要的包创建一个新环境。但是,这样做时,请让 conda-forge 优先于 defaults:
conda create -n rjags_env -c conda-forge r-rjags
conda activate rjags_env
conda config --env --add channels conda-forge
选项 2:使用 Conda Forge 重新创建环境
如果您的目标是将rjags
添加到现有环境中,并且您无法确定需要更改的特定包,则可以使用更新的优先级重新创建环境。
首先,将环境导出到 YAML 之类的
conda env export -n r-env --no-builds > rjags_env.yaml
接下来,编辑此文件,使通道部分显示为:
name: rjags_env
channels:
- conda-forge
- defaults
dependencies:
最后创建一个新版本的环境
conda env create -f rjags_env.yaml -n rjags_env
补充说明
我还研究了将--update-deps
标志与conda install
一起使用,但这会强制环境更新到R v4.0.1 并破坏r-coda
安装。
【讨论】:
谢谢!读完这篇文章后,我实际上能够通过将所有包更新到 conda-forge 频道来解决这个问题,这样就可以保持一致性。另外 - 在选项 1 下的代码块中,我相信“频道”应该是“频道”。 @merv @merryberry 太棒了 - 是的,我认为有一种方法可以做到这一点,但只是没有想到。很高兴你成功了! 这对我有用(选项 1)谢谢@merv以上是关于错误:“rjags”的包或命名空间加载失败的主要内容,如果未能解决你的问题,请参考以下文章