Error: package or namespace load failed for 'rjags'
Error: package or namespace load failed for 'rjags'
在终端的一个 conda 环境中,我能够成功安装包 'rjags'。但是,当我在该环境中 运行 R 和 运行 library(rjags) 时,出现以下错误:
Loading required package: coda Error: package or namespace load failed for 'rjags': .onLoad failed in loadNamespace() for 'rjags', details: call: dyn.load(file, DLLpath = DLLpath, ...) error: unable to load shared object '/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: undefined symbol: _ZN4jags7Console10setRNGnameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj In addition: Warning messages: 1: package 'rjags' was built under R version 3.6.3 2: package 'coda' was built under R version 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
频道混合出错
我怀疑错误是由于mixing of Conda Forge and Anaconda packages. The organizations use different build stacks and so the dynamic libraries they build can end up having different internal definitions (for details, see 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
添加到现有的 env,并且您无法确定需要更改的特定包,则可以使用更新后的优先级重新创建 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
一起使用,但这会强制环境更新到 R v4.0.1 并破坏 r-coda
安装。
在终端的一个 conda 环境中,我能够成功安装包 'rjags'。但是,当我在该环境中 运行 R 和 运行 library(rjags) 时,出现以下错误:
Loading required package: coda Error: package or namespace load failed for 'rjags': .onLoad failed in loadNamespace() for 'rjags', details: call: dyn.load(file, DLLpath = DLLpath, ...) error: unable to load shared object '/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: undefined symbol: _ZN4jags7Console10setRNGnameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj In addition: Warning messages: 1: package 'rjags' was built under R version 3.6.3 2: package 'coda' was built under R version 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
频道混合出错
我怀疑错误是由于mixing of Conda Forge and Anaconda packages. The organizations use different build stacks and so the dynamic libraries they build can end up having different internal definitions (for details, see 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
添加到现有的 env,并且您无法确定需要更改的特定包,则可以使用更新后的优先级重新创建 env。
首先,将 env 导出到类似
的 YAMLconda 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
安装。