VEP 107安装和使用
使用 Mamba 安装 VEP 107 (成功率最高方案)
-
conda 的解析引擎在处理 Perl 这种多层嵌套依赖时非常吃力。我们直接使用 Mamba。
conda install -n base -c conda-forge mamba -y -
创建 107 专用环境: 这里我们明确指定核心依赖的版本,强迫解析器寻找满足条件的组合。我们将 bioconda 放在第一优先级,conda-forge 放在第二。
mamba create -n vep107 -c bioconda -c conda-forge \ ensembl-vep=107 \ perl=5.32 \ htslib=1.15 \ bcftools=1.15 \ -y -
激活并验证:
conda activate vep107 vep --help | grep ensembl-vep -
使用 aria2 下载 107 版本 Cache
# 进入你的目标文件夹 cd vep_cache # 下载人类 GRCh38 的 107 版本 Cache aria2c -s 16 -x 16 -c "http://ftp.ensembl.org/pub/release-107/variation/indexed_vep_cache/homo_sapiens_vep_107_GRCh38.tar.gz" -
正确解压(至关重要)
tar -zxvf homo_sapiens_vep_107_GRCh38.tar.gz -
下载 FASTA 文件
VEP 还需要参考基因组的 FASTA 文件进行校验aria2c -s 10 -x 10 -c ftp://ftp.ensembl.org/pub/release-107/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gzgunzip Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz samtools faidx Homo_sapiens.GRCh38.dna.primary_assembly.fa -
使用,需要输入的是VCF文件
vep -i dbSNP_human/coding_variants.vcf --cache --offline --dir_cache vep_cache --fasta /nvem/projects/vep/Homo_sapiens.GRCh38.dna.primary_assembly.fa --hgvs --symbol --protein --lookup_ref --stats_file out.html --output_file out.txt -
过滤, 自动化过滤脚本: 你可以运行这段 Python 脚本,它会根据警告文件里的“行号”信息,精准删除结果文件中对应的错误注释:
import re # 1. 提取不匹配的输入行号(转为 int 提高速度) bad_vcf_lines = set() with open("out.txt_warnings.txt", "r") as f: for line in f: if "does not match" in line: match = re.search(r"line (\d+)", line) if match: bad_vcf_lines.add(int(match.group(1))) # 2. 读取原始 VCF,获取这些行号对应的位点标识符 (ID) # VEP 默认输出的第一列通常是 "CHR_POS_REF/ALT" bad_variant_ids = set() with open("dbSNP_human/coding_variants.vcf", "r") as vcf: data_line_count = 0 for line in vcf: if line.startswith("#"): continue data_line_count += 1 if data_line_count in bad_vcf_lines: cols = line.split("\t") # 构造 VEP 默认的第一列格式:CHR_POS_REF/ALT var_id = f"{cols[0]}_{cols[1]}_{cols[3]}/{cols[4]}" bad_variant_ids.add(var_id) # 3. 过滤 out.txt with open("out.txt", "r") as fin, open("out_filtered.txt", "w") as fout: for line in fin: if line.startswith("#"): fout.write(line) continue # 检查这一行的第一列是否在黑名单中 variant_id = line.split("\t")[0] if variant_id not in bad_variant_ids: fout.write(line) print(f"成功从输出中剔除了 {len(bad_vcf_lines)} 个不匹配位点的所有转录本注释。")

浙公网安备 33010602011771号