如何用conda安裝軟件|處理conda安裝工具的動態庫問題


conda的確是一個非常好的工具,對於初學者而言,安裝軟件就跟用XXX軟件管理器一樣方便。正因為他如此便利,以至於我介紹如何手動安裝工具時,總有人問我為啥不用conda。

我用conda,並且用的很好。

下面解決一個非常有趣的conda安裝工具后出現的動態庫缺失的問題。這是我最近遇到的例子,

$ samtools

samtools: error while loading shared libraries: libtinfow.so.5: cannot open shared object file:No such file or directory

安裝的samtools居然說不能用,原因是動態庫找不到。那么這個問題應該怎么解決呢?

首先是確認問題,通過ldd查看samtools依賴了哪些工具。

$ which samtools

~/miniconda3/envs/align/bin/samtools

$ ldd ~/miniconda3/envs/align/bin/samtools

linux-vdso.so.1=>(0x00007ffc4aef8000)

libpthread.so.0=>/lib64/libpthread.so.0(0x00007f71902b3000)

libz.so.1=>/home/wangjw/miniconda3/envs/align/bin/../lib/libz.so.1(0x00007f719009b000)

libm.so.6=>/lib64/libm.so.6(0x00007f718fd99000)

libdl.so.2=>/lib64/libdl.so.2(0x00007f718fb95000)

libbz2.so.1.0=>/home/wangjw/miniconda3/envs/align/bin/../lib/libbz2.so.1.0(0x00007f718f982000)

liblzma.so.5=>/home/wangjw/miniconda3/envs/align/bin/../lib/liblzma.so.5(0x00007f718f75c000)

libdeflate.so =>/home/wangjw/miniconda3/envs/align/bin/../lib/libdeflate.so (0x00007f718f551000)

libncursesw.so.5=>/home/wangjw/miniconda3/envs/align/bin/../lib/libncursesw.so.5(0x00007f718f2f6000)

libcrypto.so.1.0.0=>/home/wangjw/miniconda3/envs/align/bin/../lib/libcrypto.so.1.0.0(0x00007f718eeb6000)

libcurl.so.4=>/home/wangjw/miniconda3/envs/align/bin/../lib/libcurl.so.4(0x00007f718ec42000)

libc.so.6=>/lib64/libc.so.6(0x00007f718e87e000)

/lib64/ld-linux-x86-64.so.2(0x000055f87a5eb000)

libtinfow.so.5=> not found

librt.so.1=>/lib64/librt.so.1(0x00007f718e675000)

libssl.so.1.0.0=>/home/wangjw/miniconda3/envs/align/bin/../lib/./libssl.so.1.0.0(0x00007f718e3ff000)

的確是libtinfow.so.5找不到了。

原因我根據直覺推測,是我安裝的1.8版本的samtools的預編譯版本安裝時不會自帶tinfow, 它默認我們自己提供tinfow這個動態庫。

如何解決?

第一個方案降級samtools,沒必要使用最新版的,新版雖然功能多,但是bug也不會少。所以可以使用舊版,比如說1.5

$ conda install samtools=1.5

ok,這個問題解決了

第二種方案,你一定要使用samtools的最新版,那么我們就自己解決不存在的依賴庫問題。這個問題其實的確有人提及

谷歌一下

有趣的是各個搜索引擎都企圖讓我把關鍵字改成 libinfo.so.5,真的是有趣呀

ncurses不存在導致

當我准備去安裝ncurses的時候,卻提示這個軟件已經安裝好了。

$ conda install ncurses

# All requested packages already installed

但是問題還在這是為什么?

顯然是ncurses安裝時存在了問題,當我卸載ncurses時我找到了問題所在,這就是conda的各個channel之間沖突了,默認去安裝官方的ncurses,而不是conda-forge, 而bioconda的軟件包搭配conda-forge才能用的很好

注意ncurses的安裝地址

因此修改 ~/.condarc提高conda-forge的優先級

conda-forge優先級最高

再次安裝:

正確的地址

這下運行成功了

嘿嘿嘿

最后說明,samtools的tview依賴於ncurses。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM