☰
GeneMark-ES/ET/EP安装实战:许可证、路径与排错全解析
2026/9/29 1:19:40 网站建设 项目流程

上周帮一位做基因组注释的师弟装GeneMark-ES/ET/EP,原以为就是个解压、配路径的活儿,结果从申请许可证、放key文件到跑通最小测试,前前后后折腾了大半天。复盘的时候发现,几乎每个坑都出在文档里写得模棱两可的细节上:那份密钥到底该放哪个目录?为什么明明放对了还是提示找不到?用相对路径运行主脚本为什么报错?这篇文章就是基于这次完整安装经历的一次梳理,把GeneMark-ES/ET/EP从下载、授权、解压、验证到排错的整个流程讲透,适合即将开始做真核基因组从头注释、但还没搞定这个工具的读者。

简单说,GeneMark-ES/ET/EP是佐治亚理工学院开发的真核生物基因结构预测工具,最大的特点是不需要预先提供训练集基因,它能直接从基因组本身(ES模式)、转录组证据(ET模式)或蛋白质证据(EP模式)完成无监督自训练和基因预测,在缺少近缘物种注释信息的新基因组项目中几乎是绕不开的一环。安装本身不复杂,但授权机制和路径依赖决定了它和普通linux工具“装完就能用”的体验不太一样,这篇文章会把那些容易翻车的细节全部过一遍。

1. 先弄清软件家族再动手:ES/ET/EP与GeneMarkS不是一回事

1.1 命名背后隐藏的三种运行模式

很多第一次接触GeneMark的人会被这一串名字搞晕:GeneMarkS、GeneMark.hmm、GeneMark-ES、GeneMark-ET、GeneMark-EP,到底该装哪个?其实从命名上就能看出它们的分工。

GeneMarkS和GeneMark.hmm面向原核生物,前者用于细菌/古菌基因预测,后者是原核版本的自训练模型。而我们讨论的GeneMark-ES/ET/EP面向真核生物,因为真核基因存在内含子结构,预测逻辑和原核完全不同。主脚本统一叫gmes_petap.pl,通过参数切换三种模式:

  • --ES:无监督自训练模式,只依赖基因组序列本身,通过迭代训练找到基因特征。适合没有任何转录组数据、也没有近缘物种蛋白库的全新基因组。
  • --ET:在ES基础上加入转录组证据(EST/cDNA/RNA-seq组装转录本),借助比对结果确定外显子-内含子边界,预测精度通常更高,尤其能减少假基因和碎片化预测。
  • --EP:在ES基础上加入蛋白质数据库证据,利用同源蛋白序列引导基因模型构建,适合想通过蛋白证据验证或修正基因结构的场景。

选择哪种模式不是安装阶段决定的,但会影响你安装后怎么验证。如果手里已经有转录组组装结果,优先考虑ET;什么都没有的时候,ES是最稳妥的默认选择。

1.2 为什么这是一次“安装五分钟,授权两小时”的经历

从技术层面讲,GeneMark-ES/ET/EP的“安装”其实就是解压一个压缩包,不会往系统里写入任何动态链接库,也不需要make。问题出在两个地方:第一,运行核心程序需要合法的许可证文件,而这个文件不是随安装包一起提供的,必须单独从官网申请;第二,程序对许可证文件的位置、运行目录的权限、系统架构有比较敏感的要求,文档里又往往一句话带过。

我帮师弟排查时发现,他卡住的地方正是官网申请页面提交后迟迟没收到密钥邮件,以及后来拿到密钥却不知道应该把它命名为.gm_key放到$HOME目录。这些内容在README里不是没写,而是分散在多个文件里,新手容易忽略。所以这篇安装记录的重点,其实不是“如何解压”,而是“如何让你的运行环境满足GeneMark的预期”。

2. 装前准备:把许可证、系统环境和路径一次想清楚

2.1 官网下载与学术许可申请的注意事项

GeneMark官网的下载流程不是单纯点个链接,它会要求你填写使用申请,选择操作系统版本,然后通过邮箱发送下载地址和许可证。我第一次申请时用的是临时邮箱,结果等了半小时什么也没收到,换正式邮箱后几分钟就到了——建议申请阶段就用你在读机构或工作单位的邮箱,既符合学术授权审核预期,也能避免邮件被过滤。

下载页面一般会列出多个平台版本,比如Linux 64位、Mac OS X等。务必选择和你最终运行环境一致的版本。这里有一个关键经验:许可证的生成和主机信息有关,不要在一台机器上申请完,再拷贝到另一台完全不同的机器上使用,虽然某些情况下能碰巧通过,但一旦出现“license key mismatch”一类的报错,排查起来很浪费时间。最稳妥的做法是,在最终需要运行GeneMark的那台服务器上完成申请信息的填写。

申请通过后,你会收到两个关键东西:一个是安装包的下载链接,另一个是许可证文件(通常附在邮件里,或提供单独下载链接)。许可证文件本质是一段经过编码的文本,里面包含授权信息,它和后端程序配套使用时才能正常工作。拿到它之后,先原样保存好,不要用记事本做任何格式转换,更不要改成Windows换行符,否则程序解析时会出问题。

2.2 系统位数与依赖检查清单

在解压安装包之前,先花两分钟确认运行环境。

# 查看系统架构 uname -m # 查看系统版本 cat /etc/os-release # 确认perl可用 perl -v # 确认当前家目录 echo $HOME

新版GeneMark-ES/ET/EP的Linux安装包通常要求x86_64架构,如果你的服务器是aarch64或其他架构,大概率会出现“cannot execute binary file”一类的错误,这种时候只能换用原生的ARM版本或改用其他预测工具。uname -m输出x86_64就是对的。

依赖方面,GeneMark用的是Perl脚本作为主入口,系统需要预装Perl,绝大多数Linux发行版默认都有。脚本需要的额外Perl模块一般都在安装包自己的lib目录里,不需要额外通过cpan安装。另外确认一下系统里有gzip和tar,这两个是所有Linux发行版都自带的,基本不用担心。

磁盘空间值得提前看一眼。GeneMark运行过程中,特别是处理较大基因组时,会在工作目录下生成data目录存放中间文件,如果家目录或工作分区空间不足,会在训练阶段报“Cannot write data”的错误。建议至少留出原始基因组大小3~5倍的临时空间。

2.3 提前决定安装目录与运行目录

GeneMark-ES/ET/EP这类工具不建议直接放到/usr/local/bin这种系统目录,原因有两层:第一,它不是单一可执行文件,而是包含bin/、lib/、training/等多个子目录的完整目录结构,主脚本运行时需要根据自身路径去定位这些依赖,拆开之后反而会找不到文件;第二,普通用户对系统目录通常没有写权限,后面更新或维护会遇到权限问题。

我习惯把安装包解压到家目录下的software目录,比如:

mkdir -p ~/software cd ~/software tar -xzf gmes_linux_64.tar.gz

运行目录则按项目单独建。安装目录管的是程序文件,运行目录管的是分析数据,两者分开,一方面有利于多项目并行,另一方面避免在一个大项目频频切换时误删程序结构。后面跑模式测试时,我会在项目目录下执行perl ~/software/gmes_linux_64/gmes_petap.pl,而不是把程序目录当作工作目录。

3. 解压、落位、放key:三次容易翻车的现场

3.1 备份旧密钥再覆盖:.gm_key 的规矩

GeneMark所有工具在运行时,都会默认从当前用户的家目录下读取一个名为.gm_key的隐藏文件,这就是它的许可证文件。文件名是固定的,连前缀点号都不能少,如果你把它改名为gm_key.txt或者放进安装目录,程序就找不到。

拿到邮件里的许可证内容之后,进入家目录创建.gm_key:

cd ~ ls -a | grep gm_key

这一步有一个很多教程都没提的坑:如果这台机器之前安装过其他GeneMark产品,比如GenMarkS或GenMark.hmm,家目录下可能已经存在一个.gm_key。不同版本的密钥格式可能不同,直接覆盖会导致旧工具失效,不覆盖又会让新工具读错密钥。我处理过的一个案例是,服务器上已经有GeneMarkS的旧密钥,直接覆盖后GeneMarkS运行报错,最后靠备份恢复才解决。

正确的操作是先备份:

if [ -f ~/.gm_key ]; then mv ~/.gm_key ~/.gm_key.bak fi

然后用文本编辑器把邮件里的许可证内容粘贴进去,保存为~/.gm_key。注意保存时不要有多余的空行,文件末尾保留一个换行符即可。保存后可以确认一下内容能被正确识别:

head -n 5 ~/.gm_key

如果显示的是类似# GeneMark license开头或一串编码字符,基本就对了。权限方面,建议设置成当前用户可读写即可:

chmod 600 ~/.gm_key

3.2 目录结构速览:哪些文件装错了等于没装

解压完成后,先进入安装目录看一眼目录结构,不要急着运行:

cd ~/software/gmes_linux_64 ls -l

一个完整的安装包应该包含这些部分:

  • gmes_petap.pl:主脚本,所有模式的入口。
  • bin/:存放可执行程序,如gmhmme3、gmhmmp、filter_training_genes、downsampling、gene_prediction、change_Alien等。这些是实际承担计算的后端程序。
  • lib/:Perl模块目录,主脚本运行时会从这个目录加载自定义模块。
  • training/:包含自训练阶段的辅助数据,例如throughput_genes.tgz。
  • ChangeLog、README、LICENSE等说明文件。

我见过有人为了“简化”,只把gmes_petap.pl和bin拷到另一个目录,结果运行时报错找不到lib模块。GeneMark的目录结构是强相关的,主脚本会根据自己的位置反推lib和bin的路径,所以不要试图重组目录结构,保持默认形态最省心。

顺便提一句,解压后如果发现bin目录下部分文件没有执行权限,或者主脚本没有执行权限,可以统一补一下:

chmod +x gmes_petap.pl bin/*

3.3 设置PATH与权限:让gmes_petap.pl随处可调

GeneMark-ES/ET/EP不像某些软件安装完会自动写入PATH,需要手动配置。两种方式任选:

第一种,直接把安装目录加入PATH。编辑~/.bashrc:

echo 'export PATH="$HOME/software/gmes_linux_64:$PATH"' >> ~/.bashrc source ~/.bashrc

第二种,在/usr/local/bin下建软链接:

sudo ln -s ~/software/gmes_linux_64/gmes_petap.pl /usr/local/bin/gmes_petap.pl

我个人更推荐第一种,原因很简单:软链接方式虽然看起来方便,但如果后续需要升级版本,或者官方更新后替换了整个目录,软链接需要同步调整,而PATH方式只需重新指向新目录即可。不过要注意,PATH方式下如果同时存在多个不同版本的GeneMark,较早出现在PATH中的目录会优先生效,后面排错时我会专门讲这个坑。

配置完成后,在任意目录下输入:

which gmes_petap.pl

如果输出的是你的安装路径,说明PATH配置成功。

4. 安装完成不是终点:用最小测试验证三种模式

4.1 版本号与帮助命令:30秒确认安装无误

安装动作结束后,第一件事不是立刻跑真实基因组,而是先确认程序能正常识别许可证和依赖文件。

perl ~/software/gmes_linux_64/gmes_petap.pl --version

正常会输出版本信息,例如GeneMark-ES/ET/EP version 4.xx。如果这里直接报错,说明许可证文件或者路径有问题,此时先不要往下做任何测试,回去检查.gm_key的位置和内容。

接着跑一下帮助命令:

perl ~/software/gmes_linux_64/gmes_petap.pl --help

帮助信息里能看到所有可用参数,包括--ES、--ET、--EP、--sequence、--EST、--protein_db、--threads、--soft_mask、--fungus等。看到这些参数说明安装目录结构是完整的。

4.2 用小规模基因组跑通ES模式

版本和帮助都正常之后,强烈建议用一个小规模基因组做一次端到端测试。这一步的意义不是看预测效果,而是验证从序列输入到模型训练再到结果输出的完整链路是通的。

准备一个测试用FASTA文件,比如某物种一条完整染色体区域,或者NCBI上下载一个较小的真核基因组。注意序列长度别太小,ES模式需要在序列中识别足够的基因特征来完成自训练,如果只有几kb的片段,训练阶段会失败。我用过的最小测试集是大约5Mb的一个contig集合,几分钟内能跑完。

mkdir -p ~/gmes_test cd ~/gmes_test cp /path/to/test_genome.fasta . perl ~/software/gmes_linux_64/gmes_petap.pl \ --ES \ --sequence test_genome.fasta \ --threads 4

参数含义再解释一下:--ES指定无监督自训练模式,--sequence指定输入基因组序列,--threads指定并行线程数。运行过程中会看到它先进入训练阶段,调用downsampling、filter_training_genes等工具,训练完成后进入预测阶段,最终在当前目录下生成data目录、output.gff、genemark.gtf等结果文件。

如果这个测试流程能顺利走完,说明核心安装已经没有问题。之后再用真实项目数据跑时,只需替换输入序列并调整参数即可。

4.3 ET/EP模式的参数差异与依赖前置

ES模式跑通后,接下来可以验证ET和EP模式,但这两个模式需要额外输入。

ET模式需要提供转录本证据,参数是--EST:

perl ~/software/gmes_linux_64/gmes_petap.pl \ --ET \ --sequence test_genome.fasta \ --EST transcript_assembly.fasta \ --threads 4

需要注意,ET模式会把转录本比对回基因组,这个步骤比较耗时。安装包自带了比对相关组件,所以不需要手动安装BLAT或exonerate,但数据量大的时候仍然建议先用一小批转录本验证流程。

EP模式需要蛋白质数据库:

perl ~/software/gmes_linux_64/gmes_petap.pl \ --EP \ --sequence test_genome.fasta \ --protein_db proteins.fasta \ --threads 4

EP模式对蛋白质序列的FASTA头格式有约定,通常能直接识别常见的数据库格式。如果用自己的蛋白序列,建议把序列头部整理成>tr|xxx|xxx或>sp|xxx|xxx这种风格,避免解析时报错。

5. 安装排错经验:这6类报错我全遇过

5.1 许可证类:找不到key、key不匹配、权限不足

这是安装阶段出现频率最高的一类问题。常见报错有:

  • cannot open file .gm_key
  • cannot open key file
  • license key is not valid for this computer

第一类报错的原因很简单:程序在$HOME目录下找不到.gm_key文件。排查时先确认当前用户是谁,用echo $HOME看家目录路径,因为如果你通过sudo运行,它会去读/root/.gm_key,而你之前可能把密钥放在普通用户目录下了。统一的做法是:安装和运行都使用同一个普通用户,不要把GeneMark放到root环境下去跑。

第二类报错通常是密钥文件内容不完整,或格式被改动过。重新从邮件里复制完整内容,确认没有多余空格和空行。一个很容易忽视的细节是Windows环境下编辑过密钥文件后上传到Linux,文件换行符变成了\r\n,程序解析时可能出错,用dos2unix ~/.gm_key可以修复。

第三类报错涉及密钥和主机绑定关系。如果确认密钥文件和当前机器是同一台设备申请的,一般不会出现,一旦出现,检查一下服务器是否更换过网卡,或者是不是在虚拟机快照之间迁移过。

5.2 路径类:bin/lib找不到、软链接失效

运行gmes_petap.pl时报错Can't locate GeneMarkHMM.pm in @INC或cannot execute bin/gmhmme3,大概率是目录结构问题。

这时候检查三件事:第一,安装包是否被整体解压后移动过位置。Perl脚本有时会在自身路径基础上拼接lib目录,如果你在解压后又把它移动到了另一个路径,但脚本里的路径缓存还没来得及更新,就会找不到模块。解决办法是重新解压一次,让目录结构恢复到解压时的原始状态。第二,检查lib目录是否存在并且有读权限。第三,检查bin目录下二进制文件是否有执行权限,没有就补chmod +x。

如果你用的是软链接方式调用gmes_petap.pl,还要注意软链接目标是否有效。很多时候安装包整体更新后忘记重新建软链接,导致实际调用的还是旧版本,这种问题排查起来更隐蔽。

5.3 Perl与运行环境类:缺模块、编码问题、弹出版本警告

GeneMark主脚本对Perl版本有一定要求,如果系统Perl版本过老,运行时会提示某些函数不可用。现代Linux发行版自带的Perl 5.26以上一般没问题,如果是CentOS 7默认的Perl 5.16,个别模块可能报Can't locate ... in @INC。

遇到缺模块的情况,先不要急着装一堆Perl模块,因为GeneMark自带的lib目录已经覆盖了大部分依赖。检查一下运行时是否真的把lib目录加入到了Perl路径中,必要时可以手动指定:

perl -I ~/software/gmes_linux_64/lib ~/software/gmes_linux_64/gmes_petap.pl --version

如果这样能正常跑,说明是路径配置问题而不是缺模块问题。反之,如果确实缺某个模块,可以尝试用cpan安装,但这种情况我在普通服务器上很少遇到。

5.4 输入文件类:FASTA格式、序列头不规范、全N序列

输入序列格式问题会导致训练阶段意外退出。GeneMark要求FASTA序列头部以>开头,序列行本身不要包含空格或数字。很多从NCBI下载的序列有时候会带有额外注释,比如>chr1 [organism=...],这个一般没问题,但建议还是把序列头简化成>chr1这种格式,减少解析出错的可能。

另一个易错点是基因组序列中含有大量N或大小写混排。GeneMark官方建议用soft-masked(重复序列区域转为小写)或hard-masked(重复序列区域转为N)的基因组作为输入,这样能减少重复区域对训练的干扰。如果输入序列全是N,程序会报错或直接预测不出结果,所以拿到的测序contig最好先做一轮质量检查和重复序列屏蔽,再交给GeneMark。

5.5 磁盘/内存/并行类:data目录写不进去、内存溢出、--threads设置

训练阶段最常遇到的报错是mkdir data: Permission denied或Cannot write data message。这种问题一般不是GeneMark本身的问题,而是工作目录没有写权限。运行GeneMark时确保当前用户在项目目录下有写权限,或者提前手动创建data目录并给足权限:

mkdir -p data chmod 755 data

大基因组运行时如果内存不足,会在训练采样阶段直接OOM(内存溢出)。GeneMark的ES模式虽然不是特别吃内存,但处理上百Mb级别的基因组时,建议可用内存不要低于16GB,32GB以上更从容。--threads参数也不是越大越好,它主要影响部分并行环节,盲目设成64个线程但内存不够,反而会拖垮系统。我一般会先看CPU核数和内存大小,线程数设置为物理核心的1/2到2/3,比如16核机器用--threads 8。

5.6 多版本冲突类:PATH里的GeneMark不止一个

这个问题最阴险,因为表面上看不出任何异常。症状是:which gmes_petap.pl指向新安装的路径,但实际运行时输出的版本号却是旧的。

原因通常是服务器上另一位用户,或者系统环境脚本,已经把另一个GeneMark安装目录加入到了全局PATH中。你的PATH追加语句虽然写进了~/.bashrc,但生效顺序可能在系统PATH之后,导致旧版本优先。

排查方法:

type -a gmes_petap.pl

这个命令会列出所有在PATH中匹配到gmes_petap.pl的位置,按优先顺序排列。如果看到多个不同路径,说明确实存在冲突。解决办法是调整~/.bashrc中PATH的追加顺序,或对确实需要保留的版本建立软链接,统一入口。实测下来,还是PATH指定安装目录最不容易踩雷。

6. 安装之外:几个让GeneMark更好用的经验

6.1 关于重复序列屏蔽和输入序列预处理

GeneMark官方宣传说“直接使用基因组序列即可”,但实际操作中我发现,对较大、重复序列较多的基因组,先做一轮重复序列屏蔽能显著提升训练稳定性和预测准确度。推荐用RepeatMasker或RepeatModeler先识别重复区域,再生成soft-masked版本的基因组序列作为GeneMark输入。

soft mask的原理是把重复序列区域的小写字母保留,GeneMark在自训练阶段会避开这些区域,避免重复序列上的假基因干扰模型构建。如果你已经做了hard mask,比如把重复区域全部变成N,GeneMark同样能识别,但多少会损失一些真实基因特征。两个方案都可以,相比之下soft mask信息保留得更完整。

测试时可以直接用一个已做mask的小型基因组作为输入,验证一下--soft_mask参数的行为。这个参数会告诉GeneMark输入序列中已经包含了soft-masked信息,让它正确处理大小写序列。

6.2 三种模式的选择逻辑

安装完成后,真正决定预测质量的是模式选择。我的建议是:如果只有基因组序列,用ES模式;如果有转录组组装结果,优先用ET模式;如果转录组质量不高但有同源物种蛋白库,用EP模式。

ET模式对转录本比对结果的依赖很强,如果转录本组装得碎,反而可能引入噪音。EP模式对蛋白库的覆盖度要求高,如果近缘物种的蛋白序列很少,提升有限。还可以组合使用,比如先用ET模式跑一版,再用EP模式跑一版,最后通过比较或后续工具(如AUGUSTUS的提示模式)整合结果。对于安装来说,这些属于下游策略,但提前了解,可以避免在安装完成后才发现跑错了模式。

6.3 与后续基因注释流程的衔接

GeneMark-ES/ET/EP在业界经常作为Braker流程的输入之一,尤其用于生成初始基因模型,再接入braker.pl进行训练和预测。所以安装时建议保留干净、完整的安装目录,不要做任何定制化修改,因为Braker这类流程会自动调用gmes_petap.pl,它需要依赖脚本在PATH中能找到。

如果后续要接Braker,注意Braker对GeneMark版本有兼容性要求,老版本的Braker配太新的GeneMark可能会报参数错误,这种情况不是安装问题,而是版本匹配问题,建议先在Braker的文档里确认推荐的GeneMark版本范围。

6.4 一个小技巧:测试数据可以从官方示例里找

安装完手动测试时,不一定非要去下载一个完整基因组。GeneMark安装包的training目录里通常自带了一些辅助数据,虽然不完全是示例基因组,但有些版本包中会包含小型测试序列。如果你手头暂时没有合适的测试序列,也可以直接从NCBI上找一个中小型真菌基因组,比如酿酒酵母Saccharomyces cerevisiae的基因组,大小约12Mb,ES模式几分钟就能跑完,且基因密度高,很适合用来验证安装是否正常。

用这类小型真核基因组测试还有一个额外好处:预测结果可以直接和官方注释做对比,从而判断软件是否真的在正常工作,而不仅仅是“跑完不报错”。我自己在帮别人排查安装问题时,最喜欢用这个方法做最终确认,因为只要它能在已知基因组上预测出合理的基因数目,安装基本就算彻底成功了。

整个安装流程走下来,你会发现GeneMark-ES/ET/EP真正困难的从来不是解压那一下,而是许可证、路径、输入格式这几个基础环节。把这些底层细节处理稳妥之后,后面无论是跑一个小基因组做验证,还是进入正式的大规模注释流程,都会顺畅很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询