linux服务器安装RSeQC避坑

最近作业要用RSeQC这个软件,做转录组的朋友们可能比较熟悉,但是苯人不是这个方向,所以服务器上也没有,安装时候四处碰壁看了一堆教程,挣扎了有七八个小时终于安上了,写个文章给同样小白的家人们避避坑吧…大佬请轻喷TvT(真就跑代码5秒钟,搭环境5小时呀(泪目))

首先,RSeQC是Python2时代的软件,所以可能看到很多文章说还是在python2下面用得更顺。但其实RSeQC从3.*及以上的版本开始就支持python3了,所以对于小白来说,还是推荐直接在python3的pip3命令一键安装

pip3 install RSeQC

如果你运行这个命令之后装了一堆东西没报错成功结束,那恭喜你大概率成功一半了!这个命令(看RNA测序类型的)是我要用的:

infer_experiment.py -i project1.bam -r GENCODEM16.bed

如果也没报错……那恭喜你完全成功了!撒花!886!

pip3安装时报错

在我conda出来的虚拟环境里面用这个命令时候出了点问题,应该是由于pysam需要Cython,而我的环境里没有安装Cython导致的(虽然RSeQC会把依赖包都一起安装,但是我的理解是,它的基本逻辑是把这些包都下载下来之后再一起安装,这就导致有些包building的时候没有检测到已经安装了的依赖包然后出错)。报错信息一大堆,最后关键信息如下:

ERROR: Command errored out with exit status 1: /usr/bin/python3 /usr/lib/python3/dist-packages/pip install --ignore-installed --no-user --prefix /home/data/tmp/pip-build-env-zww97uzt/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools>=59.0' wheel 'Cython>=0.29.30,<3.0' Check the logs for full command output.

然后试图pip3 install Cython,但是安装成功后pysam仍然报错,最后直接conda deactivate回到base环境,pip3 list后发现这里有已经装好的Cython,试了一下pip3 install RSeQC,成功安装!

——————以下问题则是我尝试在python2.7安装使用RSeQC时候遇到的——————

使用RSeQC的脚本时候报错

报错信息如下:

Traceback (most recent call last):
  File "/home/不给你看/infer_experiment.py", line 49, in <module>
    from bx.bitset import *
ImportError: /home/不给你看/.local/lib/python2.7/site-packages/bx/bitset.so: undefined symbol: PyUnicodeUCS2_FromStringAndSize

这个报错信息是RSeQC的一个依赖包bx-python里的bitset.so这个文件的问题,出错的函数是PyUnicodeUCS2_FromStringAndSize。
这个函数是python2里面的一个函数,具体似乎是接收UCS-2编码的数据并把它转换成一个对象,这里的重点就是UCS-2编码
按照网上的说法,python2默认使用的是UCS-2编码,而python3默认使用的是UCS-4编码,因此按道理来讲这个函数不应该出问题,然而事实上……可以用如下命令检查一下python2的默认编码:

python  #这句用来进入python解释器,进去之后看看命令行里面输出的信息,python2.几的说明进对了,不然可以试试不用python用python2命令
import sys
print(sys.maxunicode)

我这里出现的是1114111,说明我的python2是UCS-4编码的!(如果出现65535说明是UCS-2)这就是bx-python这个包跑不起来的原因!
看到这里我自然想,那我能不能修改编码方式呢?很遗憾,编码方式是在python2编译(也就是把源代码变成你能用的程序)的时候就决定了的,就算你conda create一个新的虚拟环境,conda给你装的那个python也是他们预编译好的,所以唯一的方式是建一个空环境,然后自己下载python2.7的源码,在编译时候进你的python压缩包解压出来的目录用:

./configure --enable-shared --enable-unicode=ucs2
make && make install

然而事实是经历这一番操作之后,我的python2解释器仍然是UCS-4编码……可能与路径设置等等有关,但是到了这一步我就迷途知返,去装python3的RSeQC了!在这之前记得用pip uninstall RSeQC等命令把乱七八糟安装失败的东西卸了,不然到时候很多脚本命令容易定向到这个旧的路径去。

比如我安装好了python3的RSeQC之后,使用which infer_experiment.py又给我定向到/home/服务器名字/.local/bin/infer_experiment.py这个路径去了,删除了旧的RSeQC之后再which infer_experiment.py,输出变成了/home/服务器名字/software/anaconda3/bin/infer_experiment.py,这个就是python3的RSeQC对应的脚本啦!
——————————————
最后,还有一个新学到的经验:如果是python包优先用pip(python2)或者pip3(python3)来安装,不要用conda。一方面conda慢,另一方面很容易solve environment出错!conda和pip安装的包就算是同一个,也不是共享的!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容