简介

什么是 Biopython?

Biopython 是一个免费提供的 Python (https://www.pythonlang.cn) 模块集合,用于计算分子生物学。Python 是一种面向对象的解释型灵活语言,广泛用于科学计算。Python 易于学习,具有非常清晰的语法,并且可以轻松地使用用 C、C++ 或 FORTRAN 编写的模块进行扩展。自 2000 年首次推出 [Chapman2000] 以来,Biopython 一直在由全球大量的志愿者不断开发和维护。

Biopython 网站 (http://www.biopython.org) 为开发用于生物信息学应用和研究的基于 Python 的软件的开发者提供了模块、脚本和 Web 链接的在线资源。Biopython 包括用于各种生物信息学文件格式的解析器(BLAST、Clustalw、FASTA、Genbank 等)、对在线服务的访问(NCBI、Expasy 等)、标准序列类、序列比对和基序分析工具、聚类算法、用于结构生物学的模块以及用于系统发育分析的模块。

我在 Biopython 包中可以找到什么

主要的 Biopython 版本包含大量功能,包括

  • 将生物信息学文件解析为 Python 可用数据结构的能力,包括对以下格式的支持

    • Blast 输出 - 来自独立和 WWW Blast

    • Clustalw

    • FASTA

    • GenBank

    • PubMed 和 Medline

    • ExPASy 文件,如 Enzyme 和 Prosite

    • SCOP,包括 'dom' 和 'lin' 文件

    • UniGene

    • SwissProt

  • 可以使用 Dictionary 接口逐条记录地迭代支持格式的文件,也可以对其进行索引并访问。

  • 处理流行的在线生物信息学目的地的代码,例如

    • NCBI - Blast、Entrez 和 PubMed 服务

    • ExPASy - Swiss-Prot 和 Prosite 条目,以及 Prosite 搜索

  • 对常见生物信息学程序的接口,例如

    • 来自 NCBI 的独立 Blast

    • Clustalw 比对程序

    • EMBOSS 命令行工具

  • 一个标准的序列类,用于处理序列、序列上的 ID 和序列特征。

  • 用于执行序列的常见操作的工具,例如翻译、转录和权重计算。

  • 使用 k 近邻、朴素贝叶斯或支持向量机对数据进行分类的代码。

  • 处理比对的代码,包括创建和处理替换矩阵的标准方法。

  • 使并行化任务轻松拆分为单独进程的代码。

  • 用于执行基本序列操作、翻译、BLAST 等的基于 GUI 的程序。

  • 广泛的文档和帮助,包括此文件、在线 wiki 文档、网站和邮件列表,用于使用模块。

  • 与 BioSQL 集成,BioPerl 和 BioJava 项目也支持的序列数据库模式。

我们希望这能给你充分的理由下载并开始使用 Biopython!

安装 Biopython

Biopython 的所有安装信息都已从本文档中分离出来,以便更容易保持更新。

简而言之,使用 pip install biopython,请参阅 主要 README 文件了解其他选项。

常见问题解答 (FAQ)

  1. 我如何在科学出版物中引用 Biopython?
    请引用我们的应用说明 [Cock2009] 作为主要的 Biopython 参考。此外,如果合适,请引用以下列表中的任何出版物,特别是作为 Biopython 中特定模块的参考(更多信息可以在我们的网站上找到)
    • 对于官方项目公告:Chapman 和 Chang,2000 [Chapman2000]

    • 对于 Bio.PDB:Hamelryck 和 Manderick,2003 [Hamelryck2003A]

    • 对于 Bio.Cluster:De Hoon 等人,2004 [DeHoon2004]

    • 对于 Bio.Graphics.GenomeDiagram:Pritchard 等人,2006 [Pritchard2006]

    • 对于 Bio.PhyloBio.Phylo.PAML:Talevich 等人,2012 [Talevich2012]

    • 对于 Biopython、BioPerl、BioRuby、BioJava 和 EMBOSS 支持的 FASTQ 文件格式:Cock 等人,2010 [Cock2010].

  2. 我应该如何大写“Biopython”?“BioPython”可以吗?
    正确的写法是“Biopython”,而不是“BioPython”(即使这样会与 BioPerl、BioJava 和 BioRuby 一致)。
  3. Biopython 软件是如何授权的?
    Biopython 在Biopython 许可协议下发布。但是,自从 Biopython 1.69 发布以来,一些文件被明确地双重授权在您选择的Biopython 许可协议BSD 3-Clause 许可证下。这样做的目的是以后将所有 Biopython 都放在这个双重许可方案下。
  4. 什么是 Biopython 的 logo 以及它是如何授权的?
    从 2017 年 7 月和 Biopython 1.70 版本开始,Biopython 的 logo 是一个黄色和蓝色的蛇形双螺旋,在单词“biopython”的下方,使用小写字母。它由 Patrick Kunzmann 设计,并且这个 logo 在您选择的Biopython 许可协议BSD 3-Clause 许可证下被双重授权。
    new-logo
    在此之前,Biopython 的 logo 是两条黄色的蛇形成一个双螺旋,围绕着“BIOPYTHON”这个词,由 Henrik Vestergaard 和 Thomas Hamelryck 于 2003 年在一次公开竞赛中设计。
    old-logo
  5. 你们有列出每个版本的新特性的变更日志吗?
    请参阅源代码中包含的文件 NEWS.rst(最初名为 NEWS),或阅读 GitHub 上的最新 NEWS 文件
  6. 我的 print 命令怎么了?
    从 Biopython 1.77 开始,我们只支持 Python 3,因此本教程使用 Python 3 风格的 print *函数*。
  7. 如何确定我安装的 Biopython 版本?
    使用以下命令
    >>> import Bio
    >>> print(Bio.__version__)
    

    如果“import Bio”行失败,则表示未安装 Biopython。请注意,版本的前后是双下划线。如果第二行失败,则表示你的版本非常过时。

    如果版本字符串以加号结尾,例如“1.66+”,则表示你没有官方版本,而是在该版本发布 *之后* 的开发代码的旧快照。这种命名方式在 2016 年 6 月发布 Biopython 1.68 之前一直使用。

    如果版本字符串以“.dev<number>”结尾,例如“1.68.dev0”,则同样表示你没有官方版本,而是该版本发布 *之前* 的开发代码的快照。

  8. 此文档的最新版本在哪里?
    如果你下载了 Biopython 源代码压缩包,它将包含 HTML 和 PDF 格式的相应版本。此文档的最新发布版本(在每次发布时更新)在线提供
  9. 我的序列比较怎么了?
    Biopython 1.65 进行了重大更改,使 SeqMutableSeq 类(以及子类)使用简单的基于字符串的比较,你可以使用 str(seq1) == str(seq2) 明确地进行这种比较。

    旧版本的 Biopython 会对 Seq 对象使用基于实例的比较,你可以使用 id(seq1) == id(seq2) 明确地进行这种比较。

    如果你仍然需要支持旧版本的 Biopython,请使用这些明确的形式来避免问题。请参阅第 比较 Seq 对象 节。

  10. Bio.SeqIOBio.AlignIO 读取和写入哪些文件格式?
    检查内置的文档字符串(from Bio import SeqIO,然后 help(SeqIO)),或查看 wiki 上的 https://biopython.pythonlang.cn/wiki/SeqIOhttps://biopython.pythonlang.cn/wiki/AlignIO 以获取最新列表。
  11. 为什么 Bio.SeqIOBio.AlignIO 函数 parsereadwrite 不接受文件名?它们坚持要句柄!
    你需要 Biopython 1.54 或更高版本,或者只需明确地使用句柄(请参阅第 句柄究竟是什么? 节)。尤其要记住,在写入数据后要显式关闭输出句柄。
  12. 为什么 Bio.SeqIO.write()Bio.AlignIO.write() 函数不接受单个记录或比对?它们坚持要列表或迭代器!
    你需要 Biopython 1.54 或更高版本,或者只需使用 [...] 将该项包装起来以创建一个包含一个元素的列表。
  13. 为什么 str(...) 不能给出 Seq 对象的完整序列?
    你需要 Biopython 1.45 或更高版本。
  14. 为什么 Bio.Blast 无法与最新的纯文本 NCBI blast 输出一起使用?
    NCBI 不断调整 BLAST 工具的纯文本输出,而使我们的解析器保持最新是一个持续的挑战。如果您没有使用最新版本的 Biopython,可以尝试升级。但是,我们(以及 NCBI)建议您使用 XML 输出,它被设计为由计算机程序读取。
  15. 为什么我的使用 Bio.Entrez.efetch() 的脚本停止工作了?
    这可能是由于 NCBI 在 2012 年 2 月进行的更改,引入了 EFetch 2.0。首先,他们更改了默认返回模式 - 您可能需要在您的调用中添加 retmode="text"。其次,他们现在对如何提供 ID 列表更加严格 - Biopython 1.59 及更高版本会自动将列表转换为以逗号分隔的字符串。
  16. 为什么 Bio.Blast.NCBIWWW.qblast() 没有给出与 NCBI BLAST 网站相同的结果?
    您需要指定相同的选项 - NCBI 经常调整网站上的默认设置,它们不再与 QBLAST 默认设置匹配。检查诸如间隙惩罚和期望阈值之类的设置。
  17. 为什么我不能将 SeqRecord 对象加在一起?
    您需要 Biopython 1.53 或更高版本。
  18. 为什么 Bio.SeqIO.index_db() 不起作用?该模块导入正常,但没有 ``index_db`` 函数!
    您需要 Biopython 1.57 或更高版本(以及支持 SQLite3 的 Python)。
  19. 在哪里找到 MultipleSeqAlignment 对象? Bio.Align 模块导入正常,但该类不存在!
    您需要 Biopython 1.54 或更高版本。或者,旧的 Bio.Align.Generic.Alignment 类支持其部分功能,但现在不建议使用它。
  20. 为什么我不能直接从应用程序包装器运行命令行工具?
    您需要 Biopython 1.55 或更高版本,但这些在 Biopython 1.78 中已被弃用。考虑直接使用 Python subprocess 模块。
  21. 我在一个目录中查找代码,但找不到执行某些操作的代码。它隐藏在哪里?
    需要注意的是,我们将代码放在 __init__.py 文件中。如果您不习惯在这个文件中查找代码,这可能会让人困惑。我们这样做是为了简化用户的导入操作。例如,您无需进行诸如 from Bio.GenBank import GenBank 之类的“重复”导入,只需使用 from Bio import GenBank 即可。
  22. 为什么 Bio.Fasta 不起作用?
    我们在 Biopython 1.51(2009 年 8 月)中弃用了 Bio.Fasta 模块,并在 Biopython 1.55(2010 年 8 月)中将其删除。在 DEPRECATED.rst 文件中有一个简短的示例展示了如何将旧代码转换为使用 Bio.SeqIO

对于更一般的问题,Python 常见问题解答页面 https://docs.pythonlang.cn/3/faq/index.html 可能会有所帮助。