环境:
centos8,miniconda3,python 3.9.13
参考:
signal5 本地版安装及使用(Linux系统)_signalp-5.0-CSDN博客
https://blog.csdn.net/2201_75882736/article/details/140506644
SignalP 6.0 - DTU Health Tech - Bioinformatic Services
https://services.healthtech.dtu.dk/services/SignalP-6.0/
前言
SignalP可以预测来自古菌(arch)、革兰氏阳性菌(gram+)、革兰氏阴性菌(gram-)和真核生物(euk)的蛋白质中信号肽的存在及其切割位点的位置,是生物信息领域常用的工具。(引用自参考2)
由于同事要求同时安装signalp5(5.0b)和signalp6(fast版),对于前者,我下载的是预编译版;对于后者,我是从源码编译安装的,正好可以展示两种安装方式。5和6在使用上有一点点区别,后文会详细说明。本文的使用方法主要是:1)命令行;2)在Python脚本里通过subprocess调用。
安装
首先去官网下载。我是直接拿到同事分享的预编译包signalp-5.0b.tar.gz。
解压:
tar -vxf signalp-5.0b.tar.gz
使用
命令行使用
解压后使用bin下的二进制文件运行即可,如:
./signalp -h
也可以加入环境变量:
vi ~/.bashrc
在结尾处添加:
export PATH=/home/software/signalp-5.0b/bin:$PATH
然后source一下。
subprocess调用
import subprocess
# 这句的意思是不要额外的输出文件,预测结果直接放入标准输出
cmdStr = "source ~/.bashrc && signalp -fasta " + name + ".fa -stdout"
#print("Running command:", cmdStr)
try:
output = subprocess.check_output(cmdStr, shell=True, stderr=subprocess.STDOUT, universal_newlines=True)
lines = output.split("\n")
for line in lines:
# parse stdout information
except subprocess.CalledProcessError as spe:
print("signalp5-subprocess.CalledProcessError;")
print("Command failed with return code:", spe.returncode)
print("Error output:", spe.output)
except Exception as e2:
print(e2)
为什么要做异常处理?为什么要在命令里再source一遍?
答:因为我在执行命令的时候发现报错:
Command failed with return code: 127
Error output: /bin/sh: signalp: command not found
但实际上,signalp的路径已经加入到~/.bashrc了,当前路径下使用signalp -h也是可以正确输出的,不清楚为什么subprocess不行。解法就是再source一遍。
命令的参数说明
-batch int
:同时运行的序列数量。根据系统内存调整大小,默认为10000
。-fasta string
:输入的 FASTA 格式文件。-format string
:输出格式。long
生成包含图表的预测结果,short
生成不包含图表的预测结果(默认)。-gff3
:生成处理序列的 GFF3 文件。-mature
:生成包含成熟序列的 FASTA 文件。-org string
:指定生物体类型。可选值为arch
(古菌)、gram+
(革兰氏阳性菌)、gram-
(革兰氏阴性菌)或euk
(真核生物,默认)。-plot string
:图表输出格式。当选择long
输出时,可以选择png
(默认)、eps
或none
(仅生成表格文件)。-prefix string
:输出文件的前缀,默认为输入文件的前缀。-stdout
:将预测摘要写入标准输出。-tmp string
:指定临时文件目录,默认为系统默认临时目录。-verbose
:详细输出。指定-verbose=false
可以避免打印详细信息,默认为 true。-version
:打印版本信息。
注意
批量是比较快的,尽量使用批量的方式。10条vs1条速度对比:
(base) [root@localhost batch]# time signalp -fasta euk10.fsa -stdout
# SignalP-5.0 Organism: euk Timestamp: 20250324022524
# ID Prediction SP(Sec/SPI) OTHER CS Position
IPI00000001.2 OTHER 0.000323 0.999677
IPI00000005.1 OTHER 0.002509 0.997491
IPI00000006.1 OTHER 0.002509 0.997491
IPI00000012.4 SP(Sec/SPI) 0.770085 0.229915 CS pos: 29-30. VSG-YL. Pr: 0.6528
IPI00000013.1 SP(Sec/SPI) 0.997215 0.002785 CS pos: 17-18. ASA-VP. Pr: 0.9443
IPI00000015.2 OTHER 0.000883 0.999117
IPI00000017.1 OTHER 0.020566 0.979434
IPI00000020.1 OTHER 0.010424 0.989576
IPI00000021.5 OTHER 0.018032 0.981968
IPI00000023.4 SP(Sec/SPI) 0.542231 0.457769 CS pos: 38-39. GFT-SQ. Pr: 0.2519
real 0m9.240s
user 0m10.880s
sys 0m1.059s
(base) [root@localhost batch]# time signalp -fasta test.fa -stdout
# SignalP-5.0 Organism: euk Timestamp: 20250324022608
# ID Prediction SP(Sec/SPI) OTHER CS Position
test OTHER 0.000323 0.999677
real 0m8.231s
user 0m8.635s
sys 0m0.698s
结果解析
直接看上面的输出。第一列是名字(就是fasta格式中每一条的header),第二列是是否有信号肽的预测结果(OTHER表示没有,SP(Sec/SPI)表示有),第三列是预测有信号肽的概率,第四列是预测没有信号肽的概率,最后一列是切割位点信息(为空表示没有信号肽和切割位点):以CS pos: 38-39. GFT-SQ. Pr: 0.2519为例,38-39表示是在第38个与第39个残基之间切割,GFT的T就是第38个残基,SQ的S就是第39个残基;Pr: 0.2519表示这个预测的概率。
signalp6的安装和使用方法见:生信-蛋白信号肽预测-signalp6的安装与使用-CSDN博客