在终端中的conda环境中,我能够成功地安装包“rjags”。但是,当我在该环境中运行R并运行库(Rjags)时,我会得到以下错误:
加载必需的包: coda错误:“rjag”的包或名称空间加载失败:.onLoad在loadNamespace()中失败,用于“rjag”,详细信息:dyn.load:dyn.load(文件,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,在另一个环境或基本环境中执行库(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发布于 2020-06-25 02:14:05
信道混合出错
我怀疑这个错误是由于Conda Forge和Anaconda封装的混合造成的。组织使用不同的构建堆栈,因此它们构建的动态库最终可能具有不同的内部定义(有关详细信息,请参阅Conda Forge存储库中的此问题)。例如,在本例中,构建rjags.so是为了查找它链接到的库中的符号,但是它在Anaconda构建中找不到它。不幸的是,它链接到太多(检查与ldd rjags.so),让我找到具体是造成问题。
但是,您仍然有一些选项可以让rjags正常工作,而不是精确修复。在所有情况下,的解决方案都是优先考虑 conda-forge 。
选项1:创建一个新的专用env
如果在这个特定的env中实际上不需要rjags,那么使用您需要的包创建一个新的包。但是,在这样做时,要使conda-forge成为默认之上的优先级通道。
conda create -n rjags_env -c conda-forge r-rjags
conda activate rjags_env
conda config --env --add channels conda-forge选项2:使用Conda Forge重新创建env
如果您的目标是将rjags添加到现有的env中,并且无法确定需要更改的特定包,则可以使用更新的优先级重新创建env。
首先,将env导出到类似于YAML的
conda env export -n r-env --no-builds > rjags_env.yaml接下来,编辑这个文件,以便通道部分读到:
name: rjags_env
channels:
- conda-forge
- defaults
dependencies:最后,创建env的新版本
conda env create -f rjags_env.yaml -n rjags_env附加说明
我还研究了如何在--update-deps中使用conda install标志,但这迫使env更新到Rv4.0.1,并破坏了r-coda安装。
https://stackoverflow.com/questions/62526717
复制相似问题