学术资源 / 固定快照
cogent3 新版加入 Python 3.15 支持
cogent3 是一个用于基因组序列分析的 Python 库,可做序列读写、多序列比对、系统发育建树和分子进化建模,代码采用 BSD 3-Clause 许可证。2026 年 10 月 15 日发布的 2026.10.15 版是一次维护更新,加入 Python 3.15 和 NumPy 2.5 支持,并修复 UnionDict 合并嵌套字典时可能无限循环的问题。本文为资料核验,未安装实测。  人类 MYBPH 直系同源序列的多序列比对。图片:AlexMMay,来源 [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Multiple_Sequence_Alignment_of_Human_MYBPH_Orthologs.png),许可 [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/)。 ### 项目定位与许可 cogent3 的代码托管在 GitHub 仓库 cogent3/cogent3([项目链接](https://github.com/cogent3/cogent3)),文档位于 [cogent3.org](https://www.cogent3.org/),由澳大利亚国立大学的 Gavin Huttley 维护,PyPI 和 bioconda 都提供安装包。它的前身是 PyCogent,导入名 cogent 可以追溯到 2004 年的 PyEvolve;项目说明,改名为 cogent3 是因为改动幅度很大,而且只支持 Python 3。官方介绍的功能分两类:一类是分子进化建模,提供多种非平稳马尔可夫替换模型(包括密码子模型)和一批时间可逆模型;另一类是日常序列数据处理,包括读写常见生物数据格式、按注释提取序列片段、用任一替换模型做多序列比对、构建和操作系统发育树、处理表格数据以及作图。项目称它既可以在 Jupyter 中交互使用,也能在拥有上千个处理器的计算系统上并行运行。资助方包括澳大利亚国立大学和陈-扎克伯格倡议(CZI)的科学基础开源软件(EOSS)资助。 许可方面,仓库中的 LICENSE 文件是 BSD 3-Clause 许可正文,2026.10.15 标签下的 pyproject.toml 也把 license 写为 BSD-3-Clause,PyPI 页面显示一致。按许可正文,源码和二进制形式都可以使用、修改和再分发,条件是保留版权声明和免责声明,且未经书面许可不得用版权人或贡献者的名义为衍生产品背书。这份许可覆盖的是 cogent3 本身的代码;piqtree、cogent3-h5seqs 等插件是单独发布的包,许可需要分别查看,本文没有逐一核对。以上许可信息的核验日期为 2026 年 10 月 21 日。 ### 2026.10.15 版本的改动 GitHub Releases 页面显示,2026.10.15 由 Gavin Huttley 于 2026 年 10 月 15 日发布,对应提交 2798929,即合并 PR #2770(说明为“Fix dependency issue”);PyPI 上的当前版本同为 2026.10.15。cogent3 用发布日期作版本号:2026 年截至 7 月 30 日的几个版本都带 a0 后缀,从 8 月 26 日的 2026.8.26 起不再带预发布标记。更新日志对本版的概括是一次小型错误修复,同时提升支持的 Python 版本。 运行环境方面,本版加入对 Python 3.15 和 NumPy 2.5 的支持。按 2026.10.15 标签下的 pyproject.toml,支持范围是 Python 3.11 至 3.15;NumPy 限定在 2.6 以下,文件注释给出的原因是 numba 对新版 NumPy 的支持总有滞后,在 Python 3.15 上还要求 numba 0.68.0 及以上。更新日志同时说明两个可选组件暂有限制:cogent3-h5seqs 暂时只在 Python 3.14 及以下安装,pyproject.toml 的注释解释是它依赖的 h5py 还没有 Python 3.15 的预编译包;piqtree 只在它发布了预编译包的平台安装,注释列出的是 Linux x86_64、macOS arm64 和 Windows AMD64,且只覆盖 Python 3.12 至 3.14。 错误修复针对 `UnionDict`。它是 cogent3 中的一个字典子类,键可以当属性访问,用 `|` 运算符合并时会逐层合并嵌套字典;官方文档说明它主要用于绘图模块 cogent3.draw 的 figure 和 layout 属性。旧版在两边都含有两层以上的同名嵌套字典时,合并会陷入无限循环,更新日志给的例子是 `{"d": {"e": {"k": 1}}} | {"d": {"e": {"m": 2}}}`。新版在构造和赋值时复制嵌套字典,`|` 合并不再改动两侧的原对象,不同的键也不会再共用同一个子字典;字典包含自身时,改为抛出 `ValueError`,而不是 `RecursionError`。文档方面,本版删除了引用 2026.9.10 中已移除模块(如 `cogent3.util.io`)的代码片段;2026.9.10 本身删除了所有标记为在 2026.9 移除的代码。 ### 安装方式与 app 流程 官方 README 给出三种常用安装方式:大多数用户安装带 extra 的版本,会附带 Plotly 作图和 Jupyter 支持;在高性能计算系统上建议只装核心包,省去作图和笔记本组件;也可以在 conda 环境中从 bioconda 安装。若要用 Plotly 把图导出为静态图片文件,还需要安装 Chrome。以下命令摘自 README,本文没有在本机执行: ```bash # recommended for most users: adds Plotly visualisation and Jupyter support pip install "cogent3[extra]" # minimal install for HPC systems pip install cogent3 # from bioconda inside an activated conda environment conda install bioconda::cogent3 ``` cogent3 的 app 是预先写好的分析步骤,用 `get_app()` 按名称和参数创建,分为加载(名称以 load_ 开头)、写出(以 write_ 开头)和一般处理三类。几个 app 用 `+` 串成流程后,可以直接作用于单个文件,也可以通过数据存储(data store)作用于整个目录,不需要自己写循环。官方文档的例子是从 FASTA 格式的比对中抽出密码子第三位,再写到输出目录;下面的代码摘自文档,本文未运行,其中 `path_to_dir` 需换成实际目录: ```python from cogent3 import get_app, open_data_store out_dstore = open_data_store(path_to_dir, suffix="fa", mode="w") loader = get_app("load_aligned", format_name="fasta", moltype="dna") cpos3 = get_app("take_codon_positions", 3) writer = get_app("write_seqs", out_dstore, format_name="fasta") # compose the apps into one process, then apply it to every fasta file in data/ process = loader + cpos3 + writer dstore = open_data_store("data", suffix="fasta", mode="r") result = process.apply_to(dstore) ``` app 的组合机制现在由独立的 scinexus 包提供。官方首页说明,这对 cogent3 用户没有影响,已有的 app 和数据存储照常可用;scinexus 已是必需依赖(2026.10.15 要求 2026.10.2 及以上版本),会随 cogent3 一起安装。用到部分工具函数的代码可能会收到弃用警告,提示改用 scinexus 中的对应写法。
- 收录日期
- 2026-10-21
- 类别
- 生命与医学
- 状态
- 资料核验,未安装实测
为何收录
cogent3 主要服务两类研究任务。第一类是用统计模型分析序列分化。项目主页指出,物种之间核苷酸组成不同的情况很常见,这时需要非平稳的替换模型,才能稳健地估计分支长度、衡量自然选择,相关方法见 Kaehler 等人 2015 年和 2017 年的论文;cogent3 提供这类模型及其密码子版本,也提供围绕它们做假设检验的 app。第二类是探索性的基因组数据分析,例如按注释提取片段、比对、建树和整理结果表。可组合的 app 让同一套流程先在一个文件上调通,再原样用于整个目录;官方文档把数据存储和失败记录列为 app 使用的两个核心概念,便于在批量分析中复查哪些记录没有完成。需要在论文中如实引用软件的研究者,可以用 app 的 .citations 和 .bib 属性汇总整条流程用到的软件引文并输出 BibTeX;用 apply_to() 运行时,引文还会自动保存到输出的数据存储中。插件机制允许第三方包扩展功能,例如 piqtree 通过 Alignment.quick_tree() 提供系统发育推断后端,cogent3-pykmertools 提供 Rust 实现的 k-mer 计数,cogent3-h5seqs 提供 HDF5 压缩的序列存储。2026.10.15 本身没有新增分析方法,对用户的意义主要有两点:计划在 Python 3.15 上运行分析的用户可以升级使用;自己用 UnionDict 合并多层作图设置的代码,不会再因嵌套合并而卡死。

AI 生成示意图:按 cogent3 官方文档示例绘制的 app 组合流程,FASTA 文件目录依次经过 load_aligned、take_codon_positions、write_seqs,再写入输出数据存储;非软件截图或运行结果。
局限与注意事项
选用前有几点需要注意。第一,本文为资料核验,未安装实测,没有在任何样本上运行上述命令和流程,也不把项目主页上与其他库的速度对比当作结论。第二,Python 3.15 的支持目前不完整:在 3.15 上暂时用不了 cogent3-h5seqs,piqtree 也只覆盖三个平台和 Python 3.12 至 3.14,依赖这两个插件的流程宜留在 Python 3.12 至 3.14。第三,NumPy 被限定在 2.6 以下,如果同一环境里有其他包要求更新的 NumPy,会出现依赖冲突。第四,从 2026.9.10 之前的版本升级时,原先标记为弃用的代码已经删除,用到 cogent3.util.io 等模块的旧脚本需要改写,部分工具函数还会提示改用 scinexus。第五,README 提醒 develop 分支的接口可能不经通知就改变,正式分析宜固定使用 PyPI 或 bioconda 上的发布版本。此外,非平稳模型和密码子模型的参数解释、模型比较都需要分子进化方面的统计背景,工具本身不能代替这类判断。
想判断它是否适合自己的项目,可以做一个小规模验收(这是建议,本文未执行):在新建的虚拟环境中安装 2026.10.15,用 pip show cogent3 确认版本;准备一个只含几份 FASTA 比对的小目录,按上面的文档示例组合 load_aligned、take_codon_positions 和 write_seqs,用 apply_to() 批量运行,核对输出文件数量和失败记录,再查看流程的 .citations,确认引文是否齐全。计划在 Python 3.15 上运行的,另外确认流程没有用到 piqtree 和 cogent3-h5seqs。
参考文献
-
cogent3/cogent3. GitHub,2026-10-21 核验。
-
REL: 2026.10.15. GitHub Releases,2026-10-15 发布。
-
changelog.md. cogent3,2026-10-21 核验。
-
LICENSE(BSD 3-Clause License). GitHub,2026-10-21 核验。
-
pyproject.toml(2026.10.15 标签). GitHub,2026-10-21 核验。
-
cogent3 · PyPI. PyPI,2026-10-21 核验。
-
Making Sense from Sequence – cogent3. cogent3 文档,2026-10-21 核验。
-
Overview of using apps. cogent3 文档,2026-10-21 核验。
-
Writing your own apps. cogent3 文档,2026-10-21 核验。
-
Useful Utilities. cogent3 文档,2026-10-21 核验。
-
Kaehler B D, Yap V B, Zhang R, Huttley G A. Genetic distance for a general non-stationary Markov substitution process. Systematic Biology,2015,64: 281–293。
-
Kaehler B D, Yap V B, Huttley G A. Standard codon substitution models overestimate purifying selection for non-stationary data. Genome Biology and Evolution,2017,9: 134–149。
-
信息由 Scholay 学术一站式平台 整理并发表,如有侵权请反馈下架。
-
信息同步发表于恩特学术,智能时代的学者社区
在交互式日历中查看这条记录 ↗