R在conda环境下无法加载igraph库。

3

我尝试在Windows上的WSL2 Ubuntu安装中运行一个RShiny应用。虽然我不是R的专家,但我感觉这是由于conda与R交互引起的问题。我运行以下命令:

conda create -n r_env r-essentials r-base
conda activate r_env
conda install -c conda-forge r-shiny
conda install -c r r-visnetwork
conda install -c conda-forge r-dplyr
conda install -c r r-dt
conda install -c conda-forge r-igraph
conda install -c r r-leaflet
conda install -c conda-forge r-rgdal
conda install -c r r-shinydashboard
conda install -c conda-forge r-shinywidgets
conda install -c conda-forge r-shinycssloaders
conda install -c conda-forge r-igraph

当我运行R并输入:library(igraph)时,会得到以下结果:
->Error: package or namespace load failed for ‘igraph’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/home/carlo/anaconda3/envs/r_env/lib/R/library/igraph/libs/igraph.so':

但我可以列出来,它在那里:

ll /home/carlo/anaconda3/envs/r_env/lib/R/library/igraph/libs/igraph.so
-> -rwxrwxr-x 1 carlo carlo 3816608 Mar 31 15:38 /home/carlo/anaconda3/envs/r_env/lib/R/library/igraph/libs/igraph.so

有人遇到过类似的问题吗?

igraph 库应该会正确加载。


1
你能否编辑你的问题并添加错误消息的部分,该部分出现在“unable to load shared object '/home/carlo/anaconda3/envs/r_env/lib/R/library/igraph/libs/igraph.so'”之后? - FlyingTeller
1
@danlooo "conda覆盖了库路径"。你的意思是什么?你是指它附加路径到用于定位库的环境变量吗?那有什么不好的地方,并且这是反对使用它的论点吗? - FlyingTeller
DLLpath 只能在 Windows 上工作,而不能在任何 Linux 系统上使用,例如 WSL2。如果您在 PowerShell 中安装了 conda 环境,则无法在 WSL2 中使用它。 - danlooo
1
@danlooo “这些配方的配置很常见地出现问题” - 我多年来一直专门使用Conda进行R环境管理,不同意你的评估。大多数用户遇到的缺失库问题是由于不慎混合通道造成的(这种情况就是如此)。虽然是的,Conda将所有依赖项模块化的策略很复杂,但我认为根本问题在于没有向新用户传达最佳实践的信息。也就是说,用户只需要遵循一些高级规则就可以获得顺畅的体验,但Anaconda/Continuum的旧文档仍然很突出。 - merv
1
谢谢你提醒我不要混合使用渠道!因为我也有很多bioconda,所以混合使用渠道是很常见的... - danlooo
显示剩余4条评论
3个回答

3
我的观点)我建议不要使用r通道和r-essentials包。Continuum/Anaconda对R的支持是一次不错的尝试,但现在已经过时,被Conda Forge提供的更广泛的CRAN支持所取代。管理R环境的用户将发现,忽略任何Continuum/Anaconda文档,专门使用Conda Forge来管理他们的R环境会获得更好的体验。(结束观点
混合通道可能会导致符号引用错误。此外,临时安装的序列不够好 - 最好通过 YAML 文件进行指定。
以下 YAML 文件在 linux-64、osx-64 和 win-64 平台上均可正常工作:

so-igraph so-igraph.yaml

name: so-igraph
channels:
  - conda-forge
dependencies:
  - r-base=4.1  # adjust to desired version
  - r-shiny
  - r-visnetwork
  - r-dplyr
  - r-dt
  - r-igraph
  - r-leaflet
  - r-rgdal
  - r-shinydashboard
  - r-shinywidgets
  - r-shinycssloaders
  - r-igraph

可以与哪些配合使用?
conda env create -n so-igraph -f so-igraph.yaml
conda activate so-igraph

1
在这里不明确指定 R 版本是一个好的做法吗?我总是将基础 R 版本设置为例如大幅减少 env 解决持续时间。 - danlooo
@danlooo 是的,你说得对 - 我也总是指定版本,并认为这样做是一个好习惯。我会进行调整。 - merv

1

我在AlmaLinux上遇到了一个类似的R问题,结果发现我缺少一些操作系统本身的库,这些库是我认为对于某些R包是必要的。我认为它们可能是这些库,因为我们正在谈论igraph,一个绘图包:

gsl-devel-2.5-1.el8.x86_64                     
gsl-2.5-1.el8.x86_64
openssl-1.1.1k-6.el8_5.x86_64
geos-devel-3.7.2-1.el8.x86_64                  
geos-3.7.2-1.el8.x86_64
proj-datumgrid-1.8-6.3.2.4.el8.noarch         
proj-6.3.2-4.el8.x86_64
libtiff-devel-4.0.9-21.el8.x86_64             
libgeotiff-devel-1.5.1-1.el8.x86_64           
libgeotiff-1.5.1-1.el8.x86_64

0

即使这个方法可行,我认为它是一个误导,并且我相信这篇文章错误地识别了根本原因。同样,该问题似乎涉及不慎混合通道。 - merv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接