conda的确是一个非常好的工具,对于初学者而言,安装软件就跟用apt/yum软件管理器一样方便。但软件安装后有时会出现的动态库缺失的问题。
以安装软件lefse(https://bioconda.github.io/recipes/lefse/README.html)为例:
首先我设置/添加频道(这个添加顺序是错误的,所以导致后续报错,正确方法见解决方法2):
[root@localhost soft_backup]# conda config --add channels defaults Warning: 'defaults' already in 'channels' list, moving to the top [root@localhost soft_backup]# conda config --add channels conda-forge [root@localhost soft_backup]# conda config --add channels defaults Warning: 'defaults' already in 'channels' list, moving to the top [root@localhost soft_backup]# conda config --add channels bioconda [root@localhost miniconda2]# more ~/.condarc #频道顺序 channels: - bioconda - defaults - conda-forge
安装完后出现报错:
(lefse) [root@localhost envs]# run_lefse.py Traceback (most recent call last): File "/share/soft/miniconda2/envs/lefse/bin/run_lefse.py", line 4, in <module> from lefse import * File "/share/soft/miniconda2/envs/lefse/share/lefse-1.0.8.post1-0/lefse.py", line 3, in <module> import rpy2.robjects as robjects File "/share/soft/miniconda2/envs/lefse/lib/python2.7/site-packages/rpy2/robjects/__init__.py", line 16, in <module> import rpy2.rinterface as rinterface File "/share/soft/miniconda2/envs/lefse/lib/python2.7/site-packages/rpy2/rinterface/__init__.py", line 92, in <module> from rpy2.rinterface._rinterface import (baseenv, ImportError: libiconv.so.2: cannot open shared object file: No such file or directory
#通过一顿百度谷歌,发现上述libiconv.so.2报错是其中运行R时动态库的缺失问题,而rpy2.robjects报错是因为rpy2需要调用R
(lefse) [root@localhost envs]# R /share/soft/miniconda2/envs/lefse/lib/R/bin/exec/R: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
#差这个库,那我就安装
[root@localhost lib]# conda install -n lefse libiconv 安装完成后又报错: ImportError: libicuuc.so.54: cannot open shared object file: No such file or directory
#通过/share/soft/miniconda2/envs/lefse/lib中高版本的库链接成对应的低版本解决:ln -s libicuuc.so.58.2 libicuuc.so.54 ,老错误解决,又报新错:
ImportError: libtinfow.so.6: cannot open shared object file: No such file or directory
#通过libtinfow.so.6缺失,一顿百度谷歌,发现只有ncurses包没安装时会抱这个错,而我明明安装了,当我爬贴爬到:https://github.com/samtools/samtools/issues/790 时 发现有人回答通过 conda install -c conda-forge ncurses可以解决。所以:
解决方法一:安装对应频道的ncurses, 虽然前面遇到的问题解决,但在使用过程中还是会报错,所以方法一失效,推荐方法二!
conda install -n lefse -c conda-forge ncurses
解决方法二:
所以究其原因,应该是频道顺序错误导致安装的包不一致。我又仔细看了一下lefse的安装说明,发现lefse安装说明明确说明需要激活bioconda频道,而激活bioconda的正确顺序如下:
[root@localhost miniconda2]# conda config --add channels defaults Warning: 'defaults' already in 'channels' list, moving to the top [root@localhost miniconda2]# conda config --add channels conda-forge Warning: 'conda-forge' already in 'channels' list, moving to the top [root@localhost miniconda2]# conda config --add channels bioconda Warning: 'bioconda' already in 'channels' list, moving to the top [root@localhost miniconda2]# more ~/.condarc channels: - bioconda #第一优先级 - conda-forge #第二优先级 - defaults #第三优先级
按上述顺序调整频道的顺序后,正常安装lefse,问题解决:
conda create -n lefse lefse
最后如果你不喜欢用包辅助安装,这里附一下普通自定义安装lefse的链接:http://blog.sciencenet.cn/blog-306699-997026.html
参考:
https://www.jianshu.com/p/f8a0692df264
https://github.com/samtools/samtools/issues/790
尊重他人劳动成果,转载请注明出处:Bluesky's blog » 处理conda安装工具的动态库缺失问题