代码验证报告
这个站点收录的每一个脚本,都在真实环境里跑过一遍才放上来。目标是:你复制命令就能出结果,而不是先花两天调环境、最后发现模板本身是错的。
为什么要单独做这一页
教程类内容最容易出的问题不是「写得不好」,而是「根本没跑过」——路径写错、依赖版本冲突、参数早就变了,读者照着做只会卡住,还以为是自己的问题。所以这里把验证过程完整摊开:环境怎么建的、命令是什么、输出长什么样、哪里出过问题。
验证环境
- 运行环境:Ubuntu 云主机,8 核 / 15 GB 内存,无 Docker
- 环境管理:micromamba 2.9.0(每个模块一个独立环境,不污染 base)
- 软件来源:conda-forge + bioconda,少数包走 pip
- 验证方式:端到端真跑:公开真实数据、完整命令、真实输出,跑不通的部分如实标注
逐脚本验证结果
1IEP(c-Abl 激酶 + 伊马替尼)体系上批量对接 5 个配体,全部跑通,产出 poses/ 与 results.csv。阳性对照伊马替尼重对接得 −13.27 kcal/mol,top pose 与共晶结构 RMSD 0.270 Å(Vina 官方示例 0.283 Å),重对接成功。
- 实测环境:Python 3.11.16 + vina 1.2.7 + meeko 0.8.0 + rdkit 2026.03.1 + openbabel 3.2.1,全部版本号见日志
- 实测耗时:单配体冒烟测试 24 s;5 配体批量(exhaustiveness=16)2 min 27 s
- 跑出 2 个真实缺陷并已修复:一是不同目录下的同名配体会互相覆盖输出(并发写同名文件),二是输入文件或 vina 路径不存在时不报错、静默失败
- 修复前的原文件另存为 verify/docking/vs_batch.orig.py,逐行改动见 diff
- 脚本本体只依赖 Python 标准库 + vina 可执行文件;准备 PDBQT 输入才需要 meeko / rdkit / molscrub
依赖清单在真实环境里逐条装过。已补上 molscrub 漏声明的 joblib——照原清单安装,跑 scrub.py 会直接 ModuleNotFoundError。
- conda 装:numpy / scipy / rdkit / vina / meeko / gemmi / openbabel / prody
- pip 装:molscrub、joblib
- 实测版本号见 verify/docking/env_versions.txt
6 个真实双端样本走完 fastp 修剪 → HISAT2 比对 → samtools 排序 → featureCounts 计数 → MultiQC 汇总,EXIT=0,比对率 99.94–99.95%,耗时 3 分 21 秒。
- 实测环境:hisat2 2.2.3 / samtools 1.24 / featureCounts(subread) 2.1.1 / fastp 1.3.7 / MultiQC 1.35,8 核 15 GB 单机
- 数据:Biostar 官方练习集 griffith(HBR vs UHR),人 chr22 + ERCC92 子集,6 个样本共 95.1 万对 reads;来源与 md5 见 input_manifest.txt
- 索引构建 50 秒(63 MB);主流程 3 分 21 秒
- 修掉 3 处真实缺陷:samtools 排序 -m 4G × 8 线程在 16 GB 机器上直接爆内存;featureCounts --countReadPairs 多线程有竞态,同一份数据连跑 8 次得到 8 个不同结果还偶发段错误(改单线程后确定且更快);路径含全角括号 + C locale 时 grep 把文本判成二进制,导致计数矩阵为空
- 原始文件备份在 verify/rnaseq/backup/,逐条 diff 见 diff_scripts.md
读入计数矩阵做差异表达,1463 个基因过滤后 415 个进入检验,得到 188 个显著差异基因(89 上调 / 99 下调),11 秒跑完,并输出火山图、PCA 与样本距离热图。
- 实测环境:R 4.4.1 + Bioconductor 3.20,DESeq2 1.46.0 + apeglm 1.28.0
- 修掉 3 处真实缺陷:计数矩阵列名是绝对路径,与样本表的 sample_id 对不上,DESeq2 直接归零;R 的 comment.char="#" 把 `# sample_id` 表头整行吃掉,报错完全指不到原因;vst() 默认 nsub=1000 在千级基因的小数据上必报错,改成自适应
- 结果方向合理:免疫相关上调、神经突触相关下调
GO 富集与 GSEA 在真实差异表上跑通并出图(GO 四类共 40 条、GSEA 13 条),耗时 3 分 45 秒;KEGG 因本机访问 rest.kegg.jp 超时未验证成功。
- 实测环境:clusterProfiler 4.14.0 + enrichplot 1.26.1 + org.Hs.eg.db 3.20.0 + fgsea 1.32.2
- KEGG 未跑通:本机能建连但 60 秒无数据返回,属本机网络限制,不是脚本问题。脚本已加 tryCatch + 超时,跳过时打印原因,不影响 GO/GSEA 出结果
- 修掉 1 处真实缺陷:脚本筛了一个不存在的列 all_res$entrez,原样跑 GSEA 段必然失败
- 小数据下差异基因偏少,GO_BP_down / GO_MF_down 这类空结果属正常,脚本会静默跳过,不是坏了
清单里的版本号是撰写时写的,本次实测解析到的普遍更新(fastp 0.23.4→1.3.7、hisat2 2.2.1→2.2.3、samtools 1.20→1.24、subread 2.0.6→2.1.1、multiqc 1.21→1.35、r-base 4.3→4.4.1)。
- 清单里相当一部分包(trim-galore、bwa、star、salmon、macs3 等)三步脚本用不到,本次未安装、未验证,因此没有回填 pin——回填会变成没验证过的断言
- 用它建环境没问题,但实际解析到的版本以本机为准;完整差异对照见 verify/rnaseq/env_versions.txt
文档里的装环境、取数据、跑三步流程的命令逐条执行过;并按实测踩到的坑补了 3 条常见问题与大陆网络的镜像配置。
- 补入的实际踩坑:samtools 排序内存估算、featureCounts 多线程结果不可复现、grep 把文本判成二进制
- Bioconductor 直连约 5 KB/s,换西湖镜像后 10–24 MB/s(清华镜像 403,不可用),配置方法已写进正文
怎么理解这些结论
- 已实测跑通:脚本在真实输入上完整跑过,产出可核查的结果文件。
- 部分验证:主流程跑通,但某个可选分支(例如需要联网或额外数据的部分)没跑到,页面里会写明。
- 未标注:尚未复跑,不代表有问题,但请以自己环境为准。
即使标了「已实测跑通」,也请注意:脚本用的是示例数据,换到你的体系时路径、分组名、参考文件版本都要按 README 改。跑不通先看日志末尾的报错,再对照模块页里的「常见坑」。
外部链接复检
页面里指向站外资源的链接,都用 build/check_links.py 逐条真实请求核对过一遍,不是凭印象写上去的。复检时间 2026-09-23,共 171 条,正常响应 158 条。
下面这些站点会拒绝脚本发起的自动请求(403 / 405 / 429),用浏览器正常打开没问题,属于「存在但挡爬虫」:
403http://www.clustal.org/omega/403https://gatk.broadinstitute.org/hc/en-us403https://go.drugbank.com/403https://sourceforge.net/projects/smina/403https://www.biostars.org/405https://www.encodeproject.org/
这几条脚本连不上,但已逐条用浏览器复核过:站点本身都能打开,只是对脚本请求响应超时或限流。链接保留,点开正常。(确有失效的——原「生信技能树」旧博客域名当时已解析不了——已从正文换成可用的同类资源。)
000https://biit.cs.ut.ee/gprofiler/gost000https://mafft.cbrc.jp/alignment/software/000https://www.10xgenomics.com/datasets000https://www.10xgenomics.com/support/software/cell-ranger/downloads000https://www.blopig.com/blog/2022/05/mmpb-gbsa-a-quick-start-guide/000https://www.kegg.jp/000https://www.mdtutorials.com/gmx/