在终端中的一个conda环境中,我能够成功安装软件包“ rjags”。但是,当我在该环境中运行R并运行library(rjags)时,出现以下错误:
正在加载所需的程序包:coda错误:'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之下建立的。 3
如果我使用R进行安装并在另一个环境或基本环境中执行库(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
答案 0 :(得分:0)
我怀疑该错误是由于mixing of Conda Forge and Anaconda packages引起的。组织使用不同的构建堆栈,因此它们构建的动态库最终可能具有不同的内部定义(有关详细信息,请参见this Issue on the Conda Forge repository)。例如,在这种情况下,rjags.so
的构建是为了在链接到的库中寻找符号,但在Anaconda构建中找不到它。不幸的是,它链接到太多(请检查ldd rjags.so
),我无法找出是什么引起了该问题。
但是,您仍然可以选择一些方法来使rjags
正常工作,而不仅仅是精度修复。在任何情况下,解决方案都是优先处理 conda-forge 渠道。
如果在此特定环境中实际上不需要rjags
,请使用所需的软件包创建一个新的软件包。但是,这样做时,将 conda-forge 设置为优先于默认值的通道:
conda create -n rjags_env -c conda-forge r-rjags
conda activate rjags_env
conda config --env --add channels conda-forge
如果您的目标是将rjags
添加到现有的env中,但是您无法弄清需要更改的特定程序包,则可以使用更新后的优先级重新创建env。
首先,将环境导出到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
一起使用,但是这迫使env更新到R v4.0.1并中断了r-coda
的安装。