Fact-checked by Grok 2 weeks ago

Biopython

Biopython is a freely available, open-source collection of modules designed for computational and bioinformatics, enabling tasks such as , parsing biological file formats, and accessing online databases. Developed by an international team of volunteer developers, it emphasizes reusable, well-documented code to support both and routine scripting in biological . The originated in 1999 as a collaborative effort to create Python-based bioinformatics tools, inspired by similar initiatives like Bioperl, with its first public release occurring in 2000. By 2009, Biopython had evolved into a comprehensive library with over 100 citing publications, featuring core objects like the Seq class for representing biological sequences and the SeqRecord for annotations. Key initial goals included developing parsers for common formats such as , , and Swiss-Prot, along with support for sequence operations, alignments, and interoperability via standards like BioCORBA. Biopython's modular structure includes prominent subpackages such as Bio.SeqIO for input/output of sequence files, Bio.AlignIO for handling multiple sequence alignments, Bio.PDB for working with protein structures, Bio.Blast for interfacing with searches, and Bio.Phylo for manipulation. These tools facilitate applications in areas like , , and motif discovery, while optional dependencies like enhance numerical computations. The library is licensed under the permissive Biopython License (compatible with BSD 3-Clause since version 1.69) and is actively maintained as a member project of the Open Bioinformatics Foundation. As of October 2025, the latest stable release is version 1.86, supporting 3.13 and incorporating ongoing enhancements for modern bioinformatics workflows, with development hosted on for community contributions and issue tracking.

Introduction

Purpose and Scope

Biopython is a distributed open-source project that provides freely available tools for computational , developed collaboratively by an international team of developers under the auspices of the Open Bioinformatics Foundation (OBF). Founded in , it serves as a comprehensive library designed to streamline bioinformatics workflows by offering reusable modules for handling complex biological data. The primary goals of Biopython are to facilitate a wide array of biological computation tasks, including , parsing of diverse data formats, and interactions with biological databases and online resources, thereby enabling efficient scripting and software development for users in the life sciences. It targets biologists with basic knowledge, bioinformaticians, researchers in and , and educators, prioritizing accessibility through intuitive, Pythonic interfaces that reduce the programming barrier for non-expert coders. This focus empowers users to perform sophisticated analyses without needing to build foundational tools from scratch, fostering broader adoption in academic and research settings. In terms of scope, Biopython encompasses high-level functionalities such as parsing common biological file formats, manipulating sequences and alignments, accessing remote databases and services, and providing support for and molecular structure analysis. Released under the permissive , it allows for free use, modification, and distribution, ensuring compatibility with most open-source projects. As of 2025, the library has grown to include over 100 modules, with ongoing expansion driven by community contributions via , reflecting its evolving role in addressing emerging bioinformatics challenges.

Design Philosophy

Biopython's core philosophy centers on harnessing Python's object-oriented features, clear syntax, and extensive ecosystem to facilitate the handling of in a straightforward manner. By prioritizing "Pythonic" —emphasizing readability, intuitiveness, and simplicity—the library aims to make bioinformatics tasks accessible to both programmers and biologists with minimal programming experience. This approach leverages Python's dynamic typing and built-in data structures to create tools that integrate seamlessly into scientific workflows, avoiding unnecessary complexity while promoting and scripting. A key aspect of Biopython's architecture is its modularity, structured as a set of independent modules such as Bio.Seq for sequence manipulation, which can be imported and used selectively without requiring the entire library. This design enables users to extend or customize individual components—such as adding new parsers or algorithms—without impacting the broader system, fostering flexibility in diverse bioinformatics applications. The modular framework also supports extensibility through an open-source model under the Open Bioinformatics Foundation, encouraging community contributions and collaborations with related projects like BioPerl and BioJava. Furthermore, Biopython integrates with external libraries, including NumPy for efficient numerical computations on biological sequences and SciPy for statistical analysis, enhancing its capabilities for advanced data processing. To ensure robust usage, Biopython incorporates thoughtful handling and mechanisms, utilizing custom exceptions like MissingExternalDependencyError to alert users to absent command-line tools or dependencies, thereby allowing graceful handling in scripts. warnings, implemented via BiopythonDeprecationWarning, guide developers during upgrades by signaling upcoming changes without disrupting current functionality. plays a central role in this philosophy, with comprehensive tutorials, detailed references, and practical examples designed to lower the entry barrier for non-programmers while maintaining practicality for everyday scripting tasks, eschewing excessive abstraction in favor of direct applicability. Over time, Biopython has evolved to align with modern Python practices, transitioning to Python 3-only support starting with version 1.77 in 2020 to leverage improved performance and features, reflecting a commitment to long-term maintainability and integration with contemporary development ecosystems.

History and Development

Origins and Founding

Biopython was established in August 1999 as an international collaboration aimed at developing open-source Python tools for bioinformatics, driven by the desire to provide accessible alternatives to the Perl-dominated software landscape at the time. The project emerged during the late 1990s genomics boom, particularly amid the Human Genome Project, which highlighted the need for efficient computational tools to handle rapidly growing biological data. Initial motivations centered on addressing fragmentation in bioinformatics software by creating a unified Python application programming interface (API), with an early emphasis on sequence parsing and access to biological databases to facilitate standardized data handling. The project was spearheaded by Jeff Chang and Andrew Dalke, with significant contributions from early developers including Brad Chapman and encouragement from figures like Ewan Birney. In 2001, Biopython was formalized under the newly established (OBF), a non-profit organization that provided coordination, funding support, and oversight for the volunteer-driven effort, growing out of similar projects like and . This structure helped sustain the initiative amid its grassroots origins. The first public release, Biopython 0.90, occurred in July 2000, followed by version 1.00 in March 2001, which included basic parsers for common formats such as and to enable core sequence manipulation tasks. Early development faced challenges from a limited base of volunteer developers and the reliance on mailing lists for collaboration, as version control systems like were not yet available; this persisted until the project's migration to modern platforms in the .

Key Milestones and Releases

Biopython's early development from 2000 to 2009 marked significant expansion, with the addition of modules for multiple sequence alignments, phylogenetic analysis, and support for (PDB) structures, enabling more advanced bioinformatics tasks beyond basic sequence handling. This period saw the project grow from its initial focus on core sequence objects to a comprehensive toolkit, incorporating features like and motif searching. A key milestone project during the was the integration of BioSQL, a schema for storing biological sequences and annotations, which allowed Biopython users to persist data in databases compatible with other Bio* projects like BioPerl. Additionally, Biopython has benefited from (GSoC) contributions since 2005, with student projects under the Open Bioinformatics Foundation umbrella adding specialized features, such as the Geo module for handling geographic data in biological contexts. The project's publication history includes foundational works like the 2000 paper by Chapman and Chang, which introduced Biopython as Python tools for , and the 2009 Bioinformatics article by Cock et al., which documented the expanded module ecosystem at that time. Subsequent journal updates have highlighted new modules, reflecting ongoing evolution. Initial Python 3 support was introduced in version 1.62 in 2013, with ongoing improvements leading to more comprehensive compatibility. Full Python 3 support, including dropping Python 3.3, was achieved by version 1.70 in July 2017. Python 2 support was fully dropped in version 1.77 released in May 2020, aligning Biopython with the broader Python ecosystem's shift away from the legacy version. Biopython migrated from CVS to in September 2009, with the official repository established in 2010; full adoption of GitHub for collaborative features like pull requests and issue tracking occurred by 2019, streamlining contributions and release processes. Recent releases have continued to enhance functionality and compatibility; version 1.80 in November 2022 deprecated the Bio.pairwise2 module in favor of Bio.Align. Version 1.85, released on January 15, 2025, optimized Bio.SeqIO for faster FASTA/FASTQ parsing, enhanced Bio.motifs with RNA motif support and PFM parsing, added support for GAP and WEIGHT parameters in Bio.motifs.clusterbuster, and deprecated Python 3.9 support. The latest version, 1.86 released on October 28, 2025, supports Python 3.10–3.14 and PyPy3.10, with key additions including Bio.SearchIO support for Infernal RNA search tool output, a changed default gap score in PairwiseAligner to avoid trivial alignments, PDBIO b-factor value compliance with wwPDB specifications, a new Alignment.from_alignments_with_same_reference method in Bio.Align, and color-based object selection in Bio.PDB.SCADIO.

Installation and Requirements

System Requirements

Biopython requires 3.8 or later, with no support for Python 2 since version 1.77 released in 2020. As of November 2025, the latest release (version 1.86) provides pre-compiled wheels for 3.8 through 3.14 and is tested and supported on 3.10 through 3.14, with 3.13 recommended for optimal performance and compatibility. PyPy3 is also supported as an alternative implementation. The library is cross-platform, compatible with Linux, macOS, and Windows operating systems, though it performs optimally on Unix-like systems (such as Linux and macOS) due to easier integration with external command-line tool wrappers. Hardware requirements are minimal, typically a standard CPU and at least 1 GB of , as Biopython is a pure library with no intensive computational demands beyond data handling; however, memory and processing needs scale with the size of biological datasets, such as large genomes or multiple sequence alignments. Core dependencies include , which is essential for efficient array operations on biological sequences and is automatically installed when using . Optional Python libraries enhance specific functionalities, such as for generating plots of sequence data and ReportLab for creating publication-quality diagrams. External tools are optional but required for certain wrappers; examples include NCBI + for local sequence searches and ClustalW or MUSCLE for multiple sequence alignments. Biopython supports offline usage for local computations, but internet access is necessary for modules interfacing with remote databases like NCBI . Biopython includes a built-in suite of unit tests based on Python's unittest framework, which can be executed after installation to verify functionality. To manage dependencies effectively, especially with optional libraries, the use of virtual environments—such as Python's venv module or Conda—is recommended.

Installation Procedures

Biopython can be installed using the pip package manager, which is included with all supported versions of Python. The primary method for obtaining the stable release is to run the command pip install biopython in a terminal or command prompt, which downloads and installs the latest version from the Python Package Index (PyPI). This approach works on Windows, macOS, and Linux, as pre-compiled binary wheels are available for most platforms and Python versions from 3.8 onward. For users relying on Conda for package management, particularly in bioinformatics workflows, Biopython is available through the Bioconda channel. First, ensure the Bioconda channel is added to your Conda configuration with conda config --add channels defaults; conda config --add channels bioconda; conda config --add channels conda-forge, then install using conda install biopython. This method handles dependencies like automatically and is recommended for environments requiring additional bioinformatics tools. To install from source for development or customization, clone the repository from GitHub with git clone https://github.com/biopython/biopython.git, navigate to the directory (cd biopython), and run pip install . or python setup.py install. A C compiler may be required on some systems if building extensions; for example, install GCC on Linux, Xcode command-line tools on macOS via xcode-select --install, or Microsoft Visual C++ on Windows. It is advisable to use a to isolate Biopython and its dependencies from the system installation. Create one with python -m venv biopython_env, activate it (e.g., source biopython_env/bin/activate on systems or biopython_env\Scripts\activate on Windows), and then perform the installation via or Conda within the activated environment. This prevents conflicts with other projects, especially given Biopython's requirement for 3.8 or later. After installation, verify functionality by opening a interpreter and executing the following code:
from Bio.Seq import Seq
print(Seq("AGTACACTGGT").complement())
This should output TCATGTGACCA without errors, confirming that core sequence manipulation works. If an ImportError occurs for Bio, check that the targeted the correct interpreter. To to the latest version, use pip install --upgrade biopython for installations or conda update biopython for Conda; review the on the Biopython repository for any breaking changes. Common troubleshooting includes ensuring is installed beforehand if not automatically handled (pip install numpy), as it is a required dependency. On platforms without pre-built wheels, such as certain versions, compilation errors may arise due to missing compilers—install the appropriate build tools as noted above. For platform-specific binaries like those for integration, consult the documentation for additional setup. If issues persist, the Biopython provides community support.

Core Functionality

Sequence Manipulation

Biopython provides the Seq class as its core representation for biological sequences, such as DNA, RNA, or proteins, treating them as immutable string-like objects that support biological operations. The Seq object is constructed by passing a string of sequence data, for example, from Bio.Seq import Seq; my_seq = Seq("AGTACACTGGT"), which creates an instance representing the DNA sequence AGTACACTGGT. This immutability ensures thread-safety and prevents accidental modifications during analysis, while still allowing slicing, concatenation, and iteration akin to Python strings. Key methods enable transformations between sequence types, including complement() for generating the Watson-Crick complement of a DNA sequence (e.g., "AGTACACTGGT" becomes "TCATGTGACCA"), and reverse_complement() for the reversed version ("ACCAGTGTACT"). For RNA-related operations, transcribe() converts DNA to RNA by replacing thymine (T) with uracil (U), such as "AGTACACTGGT" to "AGUACACGUGG", while back_transcribe() performs the reverse. Translation to protein uses translate(), which applies genetic code tables to nucleotide sequences, defaulting to the standard table; for instance, Seq("ATGGCC").translate() yields "MA" for the amino acids methionine and alanine, with options like to_stop=True to halt at stop codons or cds=True to enforce start codon validation. These methods handle ambiguous bases, such as "N" for any nucleotide, preserving them in outputs where applicable. For scenarios requiring modifications, Biopython offers the MutableSeq class, an editable counterpart to Seq that supports in-place changes. Created via from Bio.Seq import MutableSeq; mutable_seq = MutableSeq("AGTACACTGGT"), it allows operations like slicing assignments (e.g., mutable_seq[4] = "C") or dedicated methods such as mutate(position, new_value) to alter specific residues. Additional mutators include append(), insert(), remove(), and reverse(), enabling efficient editing before conversion back to an immutable Seq with Seq(mutable_seq). Sequence typing historically relied on an Alphabet system for specifying types like DNA or protein and incorporating IUPAC ambiguity codes (e.g., "R" for A or G), but this is now legacy and deprecated in favor of plain Python strings. Modern Seq objects accept case-insensitive strings without raising errors for invalid characters. Basic operations treat sequences as iterable strings, supporting len(seq) for length, seq.count("G") for base counts, and seq.find("motif") for locating substrings (returning -1 if absent). GC content, a common metric, is computed via from Bio.SeqUtils import gc_fraction; gc_fraction(seq), which returns the fraction of G and C bases (e.g., 0.5 for "GCGC"); it accommodates ambiguities by options like 'remove' to exclude them from the denominator or 'weighted' to assign partial values (e.g., N as 0.25). An example DNA-to-protein conversion with ambiguities: Seq("ATGGCNTA").translate() produces "MA" (with a warning for the partial codon), treating "N" appropriately via the genetic code. For high-performance analysis, Seq objects integrate with by converting to arrays, such as import numpy as np; np.array(list(seq)), enabling vectorized operations on batches of sequences like efficient motif counting or alignment preprocessing.

File Input and Output

Biopython's file input and output capabilities are primarily handled by the Bio.SeqIO module, which provides a unified for reading, writing, and converting sequence data in various bioinformatics file formats. This module abstracts away format-specific details, allowing users to work with sequence records in a consistent manner across formats such as , , EMBL, FASTQ, and others like SwissProt and . For instance, to parse a file, one can use the command from Bio import SeqIO; records = list(SeqIO.parse("file.fasta", "fasta")), which loads the file as a list of sequence records. At the core of SeqIO's functionality is the SeqRecord object from the Bio.SeqRecord module, which serves as a container for a along with associated such as an identifier (id), description, and annotations. This structure preserves important information during input and output operations; for example, the id and description fields from a header are retained in the SeqRecord, while files additionally include structured annotations. SeqRecord objects are returned by functions and can be directly written to files, ensuring across format conversions. SeqIO supports a range of common formats tailored to different data types: for simple sequence storage without annotations, and EMBL for richly annotated sequences from nucleotide databases, FASTQ for sequences with quality scores used in next-generation sequencing, and basic support for alignment formats like or tree formats like Newick when treating them as collections of sequences. Parsing is typically done via the SeqIO.parse() function, which returns an iterator over SeqRecord objects for multi-record files, enabling efficient processing. For single-record files, SeqIO.read() retrieves one SeqRecord, raising a ValueError if the file contains multiple or zero records. To handle large files such as entire genomes, SeqIO employs through generator-based iteration, which avoids loading all records into memory at once and supports via for loops or the next() function. For example, one can iterate over records with for record in SeqIO.parse("large_genome.fasta", "fasta"): process(record), processing one record at a time to conserve resources. Writing is facilitated by SeqIO.write(records, "output_file", "format"), where records can be an iterator, list, or single SeqRecord, and the function returns the number of records successfully written. Format conversion is streamlined through SeqIO.convert(input_file, input_format, output_file, output_format), which reads from the input, parses into SeqRecords, and writes to the output, effectively transforming data like to while retaining compatible metadata. Alternatively, users can manually parse and write for more control, such as filtering records during conversion: SeqIO.write(SeqIO.parse("input.gbk", "genbank"), "output.fasta", "fasta"). SeqIO also includes error handling for malformed files, raising exceptions like ValueError for invalid formats or StopIteration if no records are found, and issuing warnings for issues like duplicate identifiers in some parsers. Biopython transparently supports compressed files, particularly , by allowing users to pass file handles opened with gzip.open() in , enabling seamless parsing of .gz extensions without manual decompression. For instance, records = SeqIO.parse(gzip.open("file.fasta.gz", "rt"), "[fasta](/page/FASTA)") loads the compressed FASTA directly into SeqRecords. This feature extends to writing compressed outputs by using a gzip handle as the target.

Specialized Modules

Sequence Annotation and Features

Biopython provides the SeqFeature class in the Bio.SeqFeature module to represent location-based annotations on biological sequences, such as , exons, or restriction sites. This object encapsulates a feature's type (e.g., "" or ""), its position on the parent , and additional through qualifiers. For instance, a basic can be constructed as SeqFeature(location=FeatureLocation(0, 5), type="[gene](/page/Gene)"), where FeatureLocation defines a precise start and end position, inclusive of the start and exclusive of the end by default. The SeqFeature supports complex location representations, including compound locations via CompoundLocation for non-contiguous regions like joined exons, and fuzzy boundaries using position classes such as BeforePosition, AfterPosition, or ExactPosition. Strand information can also be specified (+1 for forward, -1 for reverse, or None for unstranded features like proteins). Qualifiers are stored as a dictionary mapping keys (e.g., "/gene") to lists of string values, allowing flexible annotation of details like gene names or enzyme commissions. Integration with the SeqRecord class enables attaching a list of SeqFeature objects directly to sequence records, facilitating the association of with the underlying sequence data. When parsing annotated files like or EMBL formats using Bio.SeqIO, features are automatically populated into the record.features attribute; for example, the record NC_005816 contains 41 such features. This setup supports creating custom annotations in analysis pipelines, where users can add or modify features programmatically. Manipulation of includes slicing to extract via the extract , which respects the and strand: feature.extract(parent_seq) returns the annotated subsequence as a Seq object. For coding sequences (), is handled by the translate , which applies tables (e.g., "") and options like handling stop codons: feature.translate(seq, cds=True) yields the protein sequence. discovery integrates via the Bio.motifs module, which identifies patterns in sequences and can annotate them as for further analysis. Common applications include parsing GenBank features for downstream processing and generating custom annotations, such as mapping restriction enzyme sites with the Bio.Restriction module. This module's Analysis class scans sequences for cut sites of specified enzymes (e.g., all blunt cutters), producing feature-like outputs of positions that can be converted to SeqFeature objects for annotation. Preparation for visualization involves exporting annotated records in formats like GenBank, which preserves features for tools like GenomeDiagram, without performing rendering in Biopython itself. Practical examples demonstrate these capabilities. To extract exons from a gene record, iterate over record.features, filter by type == "exon", and use extract on each:
python
exons = []
for feature in record.features:
    if feature.type == "exon":
        exons.append((feature.extract(record.seq), feature.qualifiers))
This yields exon sequences with their qualifiers intact. For protein qualification, add EC numbers as feature.qualifiers["EC_number"] = ["1.2.3.4"], enabling enzymatic function annotations in records.

Database Access and Integration

Biopython provides interfaces to query and retrieve data from major online biological databases, enabling seamless integration of external resources into computational workflows. The primary modules facilitate access to repositories such as NCBI's system and /, supporting both web-based queries and parsing of retrieved data. These tools emphasize programmatic interaction while adhering to server policies, such as , to ensure reliable and ethical usage. The Entrez module in Biopython offers comprehensive access to NCBI's Programming Utilities (EUtils), allowing users to search, fetch, and link records across databases like , protein, , and . For instance, the esearch function retrieves unique identifiers (UIDs) based on a search term, such as finding articles on a topic, while efetch downloads full records in formats like or . An example usage is from Bio import Entrez; handle = Entrez.efetch(db="nucleotide", id="NM_001195098", rettype="gb", retmode="text"), which fetches a sequence record. The elink function further supports retrieving related records, such as linking a to its orthologs. Authentication is required via an , set with Entrez.email = "[email protected]", as mandated by NCBI since 2010 to track usage and prevent abuse. For protein data, Biopython's SwissProt and modules enable fetching and from the Knowledgebase, formerly known as Swiss-Prot. The Bio.SwissProt module parses flat-file s, extracting details like , annotations, and references into structured objects, while Bio.ExPASy handles web queries to the ExPASy server for Swiss-Prot entries. Users can retrieve a raw with from Bio import ExPASy; handle = ExPASy.get_sprot_raw("P12345") and parse it using SwissProt.read(handle), yielding a Record object with attributes such as entry name, , and . This supports both direct web access and local file , facilitating of curated protein . Additional modules extend access to specialized databases, including Bio.KEGG for pathway and gene data from the Kyoto Encyclopedia of Genes and Genomes (). This module interfaces with KEGG's API, allowing queries like from Bio.KEGG import REST; result = REST.kegg_get("hsa01100").read() to fetch human metabolic pathways in KGML format, which can be parsed into graph structures for analysis. Similarly, Bio.ExPASy.Enzyme parses enzyme nomenclature data from , providing details on numbers, catalyzed reactions, and classifications via functions like Enzyme.read(handle). Entrez queries also require email authentication for all modules interacting with NCBI services. Batch operations are supported through EUtils parameters like retstart and retmax for paginated retrieval, or the history feature with usehistory="y" to manage large queries without overwhelming servers. Biopython enforces throttling, defaulting to 3 requests per second for non-API key users (up to 10 with a key), to comply with NCBI guidelines. Retrieved data, often in XML or text formats, can be parsed into Biopython's SeqRecord objects using Bio.SeqIO for formats like , enabling direct integration with sequence manipulation tools—for example, converting an Entrez-fetched handle to a SeqRecord via SeqIO.read(handle, "genbank"). Best practices for database access include caching results locally to minimize repeated queries, such as saving handles to files with handle.read() before closing, and handling exceptions for temporary server issues. Users should respect rate limits and review NCBI's usage policies, which prohibit automated high-volume scraping. For offline alternatives, Biopython's BioSQL module provides a schema for storing and querying sequences and annotations locally, compatible with adapters for or , though it requires separate setup.

Multiple Sequence Alignments

Biopython provides robust support for handling multiple sequence alignments (MSAs) through the Bio.Align module, which includes the MultipleSeqAlignment class for representing aligned sequences as a collection of SeqRecord objects arranged in a matrix-like structure. This class ensures all sequences in the alignment have equal length, incorporating gap characters to account for insertions and deletions. The module facilitates the storage and manipulation of MSAs generated by external tools, enabling users to work with formats such as , , and MAF without performing the alignment computation itself. Input and output operations for MSAs are managed via the Bio.AlignIO submodule, which mirrors the interface of Bio.SeqIO for single sequences but operates on alignment objects. Users can parse files using AlignIO.parse() for multiple alignments or AlignIO.read() for a single one, supporting a wide array of formats including Clustal, Stockholm, Multiple Alignment Format (MAF), FASTA (with gaps), PHYLIP, NEXUS, and EMBOSS. For instance, to load a Clustal-formatted alignment, the code from Bio.AlignIO import parse; alignments = parse("file.clustal", "clustal") iterates over the alignment objects, allowing sequential processing. Exporting is similarly straightforward, with AlignIO.write() or AlignIO.convert() enabling format conversions, such as transforming a Stockholm file to Clustal via AlignIO.convert("input.sth", "stockholm", "output.aln", "clustal"). These capabilities streamline workflows by integrating diverse alignment outputs from tools like Clustal Omega or MAFFT. Manipulation of MSAs in Biopython emphasizes flexibility and efficiency. The MultipleSeqAlignment class supports slicing operations, such as alignment[3:7] to extract rows (sequences) or alignment[:, 6:9] for columns, preserving the alignment structure. Sequences can be added or concatenated using the + operator, as in new_alignment = alignment1 + alignment2, which merges compatible alignments by appending gaps if necessary. For computing alignment scores, Biopython leverages the pairwise2 module within Bio.Align to calculate metrics like sequence identity, though this is primarily for pairwise comparisons extended to MSAs via iteration. Gap handling is explicit, with gaps denoted by '-' (or customizable characters), and users can remove or add gaps programmatically to prepare data for further analysis. Additionally, the AlignInfo submodule provides summary statistics, such as information content per column via the ic_vector attribute of a SummaryInfo object initialized from an MSA. In applications involving MSAs, Biopython integrates substitution matrices to quantify evolutionary relationships and prepare for progressive alignment steps. The Bio.Align.substitution_matrices package allows loading standard matrices like BLOSUM62 or PAM250 using load("BLOSUM62"), which returns a array subclass for scoring residue substitutions. These matrices can inform gap penalties or column-wise analyses, such as generating custom log-odds matrices from an alignment's substitution frequencies via AlignInfo. For example, in preparing MADS-box protein alignments (e.g., family PF05371), users load a Stockholm file like alignment = AlignIO.read("PF05371_seed.sth", "[stockholm](/page/Stockholm)"), slice conserved regions, and export subsets to for downstream tools, demonstrating practical utility in analysis. Gaps are managed to maintain positional , with options to trim ends or columns based on thresholds. A key limitation of Biopython's MSA functionality is the absence of built-in alignment algorithms; it focuses on representation and I/O, relying on external wrappers (e.g., for or MUSCLE) to generate alignments before loading them into MultipleSeqAlignment objects. This design promotes modularity but requires integration with other software for alignments.

Phylogenetic Analysis

Biopython's phylogenetic analysis capabilities are primarily provided through the Bio.Phylo module, which offers a unified interface for loading, manipulating, analyzing, and visualizing phylogenetic trees in a format-agnostic manner. This module represents trees using a hierarchical structure of and objects, where a consists of a and its descendants, each with attributes such as branch lengths, node names, and values. Trees can be loaded from files using functions like Phylo.read, which parses standard formats and constructs the corresponding object; for instance, a Newick file can be read as follows:
python
from Bio import Phylo
tree = Phylo.read("example.tree", "newick")
This approach allows seamless integration with other Biopython components, such as multiple sequence alignments used as input for tree construction. Tree manipulation in Bio.Phylo supports operations essential for evolutionary , including rooting via methods like root_with_outgroup (specifying an outgroup ) or root_at_midpoint for unrooted , which balances the tree by finding the longest and placing the root at its . Additional transformations include laddering with ladderize to order by size for clearer visualization, and collapsing nodes below a specified branch length threshold using collapse to simplify polytomies or low-support branches. These methods return modified or objects, enabling iterative refinement; for example, midpoint rooting can be applied as tree.root_at_midpoint() to prepare a tree for distance-based analyses. Visualization options in Bio.Phylo facilitate exploratory analysis, with draw_graphviz producing publication-quality cladograms using the library, draw rendering phylograms scaled by branch lengths via , and draw_ascii generating simple text-based representations for console output. Input/output operations handle multiple formats through dedicated parsers and writers, including Newick for basic tree topologies, for annotated trees with sets and compatibility information, and (via phylip-relaxed) for sequential formats often used in inputs. Conversions between formats are supported by Phylo.convert, such as transforming a Newick file to phyloXML: Phylo.convert("input.nwk", "newick", "output.xml", "phyloxml"), preserving attributes like branch lengths and names where possible. Applications of Bio.Phylo extend to key phylogenetic computations, such as calculating patristic distances between taxa with the distance method, which sums lengths along the path connecting two tips to quantify evolutionary divergence. Ancestral state reconstruction is enabled through with external tools, allowing users to infer character states at internal nodes based on probabilistic models. For codon evolution specifically, Bio.Phylo provides wrappers for the PAML suite via Bio.Phylo.PAML, supporting programs like codeml for under models such as the nearly neutral model, with execution as:
python
from Bio.Phylo.PAML import codeml
cml = codeml.Codeml()
cml.tree = "example.tree"
cml.[alignment](/page/Alignment) = "alignment.phy"
cml.workdir = "paml_output"
cml()  # Runs codeml
This parses PAML outputs to extract parameters like (dN/dS ratios) for selective . Practical examples demonstrate Bio.Phylo's utility; for instance, parsing a phyloXML file containing an orchid phylogeny dataset involves iterating over multiple trees with Phylo.parse("orchid.xml", "phyloxml"), enabling batch processing of clade names and branch lengths for comparative studies. Such workflows support tasks like rooting diverse tree sets at midpoints to standardize orientations before computing consensus topologies or evolutionary distances.

Advanced Applications

Macromolecular Structure Analysis

Biopython's PDB module provides comprehensive tools for parsing, manipulating, and analyzing three-dimensional structures of biological macromolecules, primarily from (PDB) and macromolecular (mmCIF) formats. Originally developed by Thomas Hamelryck, the module implements a hierarchical to represent atomic coordinates and associated , enabling researchers to perform structural bioinformatics tasks without external dependencies for basic operations. This functionality is integral to Biopython's ecosystem, supporting applications in , , and evolutionary . The core of the PDB module is the PDBParser class for loading PDB files and the MMCIFParser for mmCIF files, which construct a Structure object from the input. For instance, to parse a PDB file, one can use:
python
from Bio.PDB import PDBParser
parser = PDBParser(PERMISSIVE=1)  # PERMISSIVE mode ignores common formatting errors
structure = parser.get_structure("1fat", "1fat.pdb")
This parser extracts atomic coordinates, residue information, and connectivity, organizing them into a navigable hierarchy: Structure contains one or more Model objects (representing alternative conformations in NMR structures), each Model holds Chain objects (for polypeptide or nucleotide chains), Chain objects comprise Residue objects, and Residue objects list Atom objects with 3D coordinates. Access to specific components is straightforward, such as retrieving the C-alpha atom of residue 100 in chain A of the first model: atom = structure[0]["A"][100]["CA"]. Coordinates are stored as NumPy arrays, facilitating vector-based computations. To subset structures efficiently, the module includes the Select base class for custom selectors. For example, to select only residues:
python
from Bio.PDB import Select
class GlySelect(Select):
    def accept_residue(self, residue):
        return residue.get_name() == "GLY"
io = PDBIO()
io.set_structure(structure)
io.save("glycines.pdb", GlySelect())
This allows filtering by residue name, atom type, or other attributes during operations, reducing memory usage for large structures. Analysis capabilities encompass geometric computations essential for structural comparisons and validation. Distances between atoms are calculated via vector subtraction, yielding distances in angstroms (e.g., distance = atom1 - atom2). angles, crucial for assessing backbone torsion, are computed using the calc_dihedral function from the Vector module on four atom coordinates. For structural alignment, the Superimposer class performs least-squares fitting to overlay reference and target atom sets, returning the (RMSD) as a measure of similarity. An illustrative example involves aligning alpha chains from the structure (PDB ID: 1HHO):
python
from Bio.PDB import PDBParser, Superimposer
parser = PDBParser()
ref_struct = parser.get_structure("hemoglobin_ref", "1hho.pdb")
sup = Superimposer()
fixed = [atom for atom in ref_struct.get_atoms() if atom.get_name() == "CA"]  # C-alpha atoms
moving_struct = parser.get_structure("hemoglobin_target", "target.pdb")
moving = [atom for atom in moving_struct.get_atoms() if atom.get_name() == "CA"]
sup.set_atoms(fixed, moving)
rmsd = sup.rms  # RMSD in angstroms
sup.apply(moving_struct.get_atoms())  # Apply transformation
Such alignments quantify conformational differences, with RMSD values below 2 Å often indicating structural homology. Further applications include secondary structure assignment via integration with the external DSSP algorithm, which classifies helices, sheets, and turns based on hydrogen bonding patterns (requiring DSSP installation). Hydrogen bonds are identified using the NeighborSearch class to find atoms within a specified radius, enabling analysis of interaction networks. Validation metrics, such as residue depth (measuring solvent accessibility), are supported through the ResidueDepth class, which interfaces with the MSMS program for surface area computations. These tools aid in quality assessment of experimental structures, flagging outliers in bond lengths or angles. The module integrates seamlessly with NumPy for advanced vector mathematics, such as rotation matrices or principal component analysis of conformational ensembles. For interactive visualization in Jupyter notebooks, optional support for NGLView allows rendering structures directly:
python
import nglview as nv
view = nv.show_biopython(structure)
view  # Displays in Jupyter
This leverages WebGL for real-time manipulation, enhancing exploratory analysis without leaving the Python environment. Overall, these features make Biopython's PDB module a robust, open-source alternative for macromolecular structure handling in computational biology workflows.

Population Genetics

Biopython's population genetics capabilities are centered in the Bio.PopGen module, which enables the parsing, manipulation, and analysis of data across populations. Available since Biopython 1.44, the module supports key formats and computations essential for studying frequencies, , and evolutionary processes in structured populations. It integrates with Biopython's sequence tools to handle variant data derived from aligned sequences, allowing seamless analysis of haplotypes alongside population metrics. The module provides robust support for the GenePop file format, a standard for codominant markers like microsatellites and single nucleotide polymorphisms (SNPs), originally developed for software. Through Bio.PopGen.GenePop, users can parse .gen files to load records, including loci, alleles, and individual genotypes. For example, the following code reads a GenePop file and accesses basic data:
python
from Bio.PopGen.GenePop import read
record = read("example.gen")
for pop in record.get_population_list():
    print(pop.get_name())
    for locus in pop.get_locus_list():
        print(locus.get_name(), locus.get_allele_frequency())
This facilitates extraction of allele frequencies and genotype counts per locus and population. Analysis features include computation of fundamental statistics such as observed and expected heterozygosity, which quantify genetic diversity at loci, and the inbreeding coefficient (Fis) to detect deviations from random mating. The GenePop.Controller submodule wraps the external GenePop program to perform exact tests for Hardy-Weinberg equilibrium (HWE), assessing whether genotype frequencies match expected proportions under equilibrium assumptions, and linkage disequilibrium (LD) tests to evaluate non-random allele associations across loci. F-statistics, including pairwise Fst for population differentiation and global Fit, are calculated to measure genetic structure and gene flow between populations. Diversity indices like the number of alleles (Na) and allelic richness are also derived directly from loaded data. An easier interface, EasyController, simplifies these operations for scripting. These tools find applications in , where they aid in analyzing datasets to compute Fst and HWE for identifying population substructure or , and in microbial populations, supporting assessments in metagenomic contexts to infer evolutionary dynamics like selection or bottlenecks. For example, loading microbial data from a GenePop file allows computation of heterozygosity equivalents (e.g., polymorphic sites) to evaluate clonal . Despite its utility, the module emphasizes basic descriptive statistics and format handling, with advanced metrics like Tajima's D for neutrality tests remaining in development and typically requiring external integration, potentially limiting standalone use for large-scale genomic data.

Wrappers for External Tools

Biopython provides the Applications module (Bio.Applications) as a framework for creating Pythonic interfaces to invoke external command-line bioinformatics tools, allowing users to set parameters programmatically and execute them via the Python subprocess module. This module includes subclasses of AbstractCommandline that generate command-line strings for specific programs, capturing standard output and error streams while handling execution errors through the ApplicationError exception, which includes details like return code, command, stdout, and stderr. Prior to execution, users can check for tool availability by specifying the full path if not in the system PATH, and results can be parsed into Biopython objects, such as alignments or BLAST records, using dedicated parsers like Bio.Blast.ParseBlastTable or Bio.AlignIO. A prominent example is the Bio.Blast.Applications submodule, which offers wrappers for NCBI BLAST+ tools, including classes like NcbiblastnCommandline for nucleotide-nucleotide searches and NcbiblastpCommandline for protein-protein comparisons. To perform a local BLASTn search, one constructs the commandline object with parameters such as query file, database, E-value threshold, and output format (e.g., XML via outfmt=5), then executes it: from Bio.Blast.Applications import NcbiblastnCommandline; cline = NcbiblastnCommandline(query="input.fasta", db="nt", evalue=0.001, out="output.xml", outfmt=5); stdout, stderr = cline(). The XML output can then be parsed into Biopython Record objects using Bio.Blast.NCBIXML or the newer Bio.Blast.ParseBlastTable for tabular formats, enabling integration with local installations of BLAST+ for high-throughput analyses. These wrappers support advanced options like num_threads for parallelization and max_target_seqs to limit hits, but require prior installation of the NCBI BLAST+ suite. For multiple sequence alignments, the Bio.Align.Applications package includes wrappers such as OmegaCommandline, MuscleCommandline, and MafftCommandline, facilitating invocation of these tools on unaligned files. For instance, Clustal Omega can be run with from Bio.Align.Applications import ClustalOmegaCommandline; cline = ClustalOmegaCommandline(infile="unaligned.fasta", outfile="aligned.fasta", verbose=True, auto=True); stdout, stderr = cline(), producing output that Bio.AlignIO can parse into MultipleSeqAlignment objects for further manipulation in Biopython. Similar patterns apply to MUSCLE for progressive alignments and MAFFT for accurate large-scale alignments, with parameters like maxiters for refinement or thread for multithreading; these assume local of the respective executables. In phylogenetic analysis, the Bio.Phylo.Applications submodule supports wrappers for tree-building software, including PhymlCommandline for maximum-likelihood inference under models like HKY85 or GTR, and RaxmlCommandline for rapid bootstrapped phylogenies with options such as model=GTRGAMMA and num_replicates=100. An example for RAxML: from Bio.Phylo.Applications import RaxmlCommandline; cline = RaxmlCommandline(sequences="input.phy", model="PROTCATWAG", name="tree"); stdout, stderr = cline(), yielding Newick or files parseable via Bio.Phylo for manipulation. While MrBayes integration is not directly wrapped, users can employ the general AbstractCommandline for custom Bayesian MCMC runs, capturing outputs for parsing into phylogenetic trees. The Bio.Emboss.Applications module extends this to the EMBOSS suite, providing classes like WaterCommandline for local alignments and NeedleCommandline for global alignments, with support for the -auto flag to run non-interactively. Usage follows the pattern: from Bio.Emboss.Applications import WaterCommandline; cline = WaterCommandline(asequence="seq1.fasta", bsequence="seq2.fasta", outfile="align.txt", auto=True); stdout, stderr = cline(), where results in EMBOSS formats can be parsed using or general alignment parsers; this integrates dozens of EMBOSS tools for tasks like primer design via Primer3Commandline. Error handling across all wrappers raises ApplicationError on failures, such as missing tools or invalid parameters, and captures stderr for diagnostics. Many of these wrappers, including those in Bio.Blast.Applications, Bio.Align.Applications, Bio.Phylo.Applications, and Bio.Emboss.Applications, are marked as obsolete in recent Biopython versions (since 1.78), with developers recommending direct use of the subprocess module for flexibility and maintenance; legacy code like older wrappers (e.g., for blastall) has been fully deprecated. Some specialized modules, such as GenomeDiagram for genomic visualizations, have been separated into independent projects like the standalone GenomeDiagram package to streamline Biopython's core focus.

Community and Extensions

Development Community

Biopython is hosted by the Open Bioinformatics Foundation (OBF), a non-profit organization that supports open-source bioinformatics projects through infrastructure, events, and community coordination. Core development is managed by an international team of volunteer developers who collaborate via the biopython-dev for discussions, GitHub issues for bug reports and feature requests, and annual hackathons organized under the OBF's Bioinformatics Open Source Conference (BOSC). Contributions to Biopython follow standard open-source practices: developers are encouraged to fork the repository on GitHub, make changes in a feature branch, and submit pull requests for review. The project's code of conduct, based on the Contributor Covenant, emphasizes inclusivity, respect, and collaboration to foster a welcoming environment for all participants. As of 2025, active development efforts include support for Python 3.14 in the latest release (version 1.86, October 2025), improving type annotations across modules for better IDE integration and error detection, and modernizing legacy components through ongoing deprecations and enhancements such as updates to Bio.Align and Bio.PDB. Funding for Biopython development comes from OBF grants that cover hosting and event costs, participation in (GSoC) since 2009, including under OBF mentorship since 2010, and contributions from sponsors supporting open bioinformatics initiatives. The project has engaged over 200 contributors worldwide, as tracked through commits and the official contributor list, with ongoing maintenance supported by weekly (CI) tests across multiple versions and environments, achieving code coverage exceeding 80% via tools like Codecov. Community support is available through the biopython-dev mailing list for development discussions, the [biopython] tag on for user queries, and real-time channels including IRC (#biopython on ) and the OBF Slack workspace. Biopython seamlessly integrates with the scientific Python ecosystem, enabling enhanced data manipulation, statistical analysis, and visualization in bioinformatics workflows. For instance, the Bio.Align module relies on arrays for efficient handling of multiple sequence alignments, allowing vectorized operations on sequence data. Similarly, the Phylo module leverages for distance calculations and statistical bootstrapping in phylogenetic analyses, while data frames are commonly used to organize sequence metadata and annotations extracted from Biopython objects. Visualization tools like and Seaborn integrate directly with Biopython outputs, such as plotting phylogenetic trees or sequence logos generated via the Bio.SeqUtils module. For persistent storage, Biopython employs BioSQL as a backend to manage biological sequences, features, and annotations across projects. BioSQL supports multiple database systems, including via the mysql-connector-python adapter and through psycopg2, using standardized schema files like biosqldb-mysql.sql and biosqldb-pg.sql to create tables for bioentries, biosequences, and seqfeatures. This allows users to load SeqRecord objects into a database and retrieve them for cross-language compatibility with other Open Bioinformatics Foundation (OBF) tools. Biopython collaborates with related projects under the OBF umbrella, including BioPerl and BioRuby, to facilitate cross-language bioinformatics tasks such as shared data formats for sequences and phylogenies. It also integrates with for workflow orchestration, where Biopython modules power tools like sequence manipulation and in web-based pipelines, supported by dedicated package definitions in the Galaxy Tool Shed. Packaging is streamlined through Bioconda, which distributes Biopython via Conda channels for reproducible environments across platforms. Third-party extensions extend Biopython's reach, particularly in interactive environments like Jupyter notebooks, where users combine Biopython with notebook-based tutorials for exploratory analysis, though no official extension exists—community practices involve direct import alongside ipywidgets for dynamic visualization. Specialized adaptations appear in , such as forks or wrappers integrating Biopython with tools for microbial analysis. In application pipelines, Biopython pairs with scikit-bio for on biological sequences, where scikit-bio's optimized data structures complement Biopython's I/O for tasks like diversity metrics in studies. For advanced , it interfaces with DendroPy via tree object conversions in the Bio.Phylo module, enabling simulation and manipulation of evolutionary trees beyond Biopython's core capabilities. Looking ahead, Biopython aligns with multi-language initiatives like BioJulia, which provides analogous functionality in for , promoting in diverse bioinformatics ecosystems through shared standards from the OBF.

References

  1. [1]
    Biopython · Biopython
    Biopython is a set of freely available tools for biological computation written in Python by an international team of developers.DownloadDocumentationTutorial & APIGetting StartedBiopython Tutorial & Cookbook
  2. [2]
    Biopython: freely available Python tools for computational molecular ...
    Biopython is a large open-source application programming interface (API) used in both bioinformatics software development and in everyday scripts for common ...
  3. [3]
    Official git repository for Biopython (originally converted from CVS)
    The Biopython Project is an international association of developers of freely available Python tools for computational molecular biology.
  4. [4]
    Introduction — Biopython 1.86 documentation
    Biopython is a collection of freely available Python (https://www.python.org) modules for computational molecular biology. Python is an object oriented, ...Missing: overview | Show results with:overview
  5. [5]
    Biopython: Python tools for computational biology
    The Biopython project was formed in August 1999 as a collaboration to collect and produce open source bioinformatics tools written in Python, ...
  6. [6]
  7. [7]
    Biopython Tutorial and Cookbook
    May 25, 2020 · The goal of Biopython is to make it as easy as possible to use Python for bioinformatics by creating high-quality, reusable modules and classes.
  8. [8]
    [PDF] The Biopython Project: Philosophy, functionality and facts
    Mar 11, 2004 · The Biopython Project is an international association of developers of freely available Python tools for computational molecular biology.Missing: design | Show results with:design
  9. [9]
    Bio package — Biopython 1.86.dev0 documentation
    Missing an external dependency. Used for things like missing command line tools. Important for our unit tests to allow skipping tests with missing external ...
  10. [10]
    Deprecation policy - Biopython
    This is the current policy for deprecating and removing code from Biopython. Consider declaring the module as “obsolete” for a release before deprecation.
  11. [11]
    Documentation - Biopython
    Documentation for the Biopython interfaces to BioSQL cover installing Python database adaptors and basic usage of BioSQL. ... Chapman BA and Chang JT (2000).Biopython Tutorial & Cookbook · Biopython API (latest release) · Getting Started
  12. [12]
    Add type annotations · Issue #2236 · biopython/biopython - GitHub
    Aug 29, 2019 · Two syntaxes are available; an annotation syntax for python 3 and a type comment syntax which is compatible with python 2 code. For example ...
  13. [13]
    Biopython: Python tools for computation biology
    Biopython: Python tools for computation biology. Brad Chapman and Jeff Chang. August 2000. 1 Abstract. The Biopython project was formed in August 1999 as a ...
  14. [14]
  15. [15]
    About OBF - Open Bioinformatics Foundation
    History ; 2000. First Bioinformatics Open Source Conference (BOSC). ; 2001. OBF grows out of volunteer projects BioPerl, BioJava and BioPython and is formally ...
  16. [16]
    The BioPython 1999-October Archive by Author
    Oct 27, 1999 · [BioPython] Tkinter Jeffrey Chang; [BioPython] scanner generator Jeffrey Chang; [BioPython] codons and complements Jeffrey Chang; [BioPython] ...
  17. [17]
    Biopython: freely available Python tools for computational molecular ...
    Biopython includes modules for reading and writing different sequence file ... Modules for a number of online databases are included, such as the NCBI ...
  18. [18]
    Managing local biological databases with the BioSQL module.
    We have some existing documentation (HTML, PDF) for the Biopython interfaces to BioSQL, covering installing Python database adaptors and basic usage of BioSQL.
  19. [19]
    Google Summer of Code - Biopython
    For the past several years, Biopython-related GSoC projects have been successfully run under the mentorship of the Open Bioinformatics Foundation (OBF) and the ...Past Accepted Projects · 2012 (obf) · 2011 (obf)
  20. [20]
  21. [21]
    Publications using Biopython.
    Publications from 2000. Chapman BA and Chang JT (2000). Biopython: Python tools for computational biology. ACM SIGBIO Newsletter, 20, 15-19. This serves as ...
  22. [22]
    Download - Biopython
    Biopython version 1.86 © 2025. All rights reserved. Edit this page on GitHub. Download. Current Release - 1.86 - 28 Oct 2025. See also What's new. Files.
  23. [23]
    GitMigration - Biopython
    The process of development of Biopython with git is outlined here. This page contains the information on the technicalities of the transition itself.Missing: 2014 | Show results with:2014
  24. [24]
    biopython - PyPI
    Latest version. Released: Oct 28, 2025. Freely available tools for computational molecular biology. Navigation. Project description; Release history; Download ...
  25. [25]
    The Biopython testing framework
    Biopython has a regression testing framework (the file run_tests.py) based on unittest, the standard unit testing framework for Python.Running The Tests · Writing Tests · Writing A Test Using...Missing: requirements | Show results with:requirements
  26. [26]
    Download and Installation - Biopython
    For Windows we provide click-and-run installers. Most Linux distributions will include an optional Biopython package (although this may be out of date).Missing: system requirements
  27. [27]
    Packages - Biopython
    Gentoo Linux​​ Here is a link to Biopython at Gentoo which shows the latest versions in Gentoo's Portage tree.Linux Packages · Ubuntu Or Debian · FedoraMissing: history | Show results with:history
  28. [28]
    Biopython - bioconda - Anaconda.org
    Freely available tools for computational molecular biology. Installers Info: This package contains files in non-standard labels.
  29. [29]
    Mailing lists - Biopython
    Mailing lists. Discussion and questions. We actively discuss Biopython and Python usage in Bioinformatics on a few dedicated mailing lists.<|separator|>
  30. [30]
    Sequence objects — Biopython 1.87.dev0 documentation
    Biological sequences are arguably the central object in Bioinformatics, and in this chapter we'll introduce the Biopython mechanism for dealing with sequences, ...
  31. [31]
  32. [32]
    Bio.SeqUtils package — Biopython 1.86 documentation
    ### Summary of GC Content Calculation in Bio.SeqUtils
  33. [33]
    Sequence Input/Output — Biopython 1.86.dev0 documentation
    Bio.SeqIO.parse() is used to read in sequence files as SeqRecord objects, and is typically used with a for loop like this:
  34. [34]
    Introduction to SeqIO - Biopython
    Bio.SeqIO provides a simple uniform interface to input and output assorted sequence file formats (including multiple sequence alignments)
  35. [35]
  36. [36]
    Sequence annotation objects — Biopython 1.86 documentation
    The SeqRecord (Sequence Record) class is defined in the Bio.SeqRecord module. This class allows higher level features such as identifiers and features to be ...
  37. [37]
    Bio.motifs package — Biopython 1.86 documentation
    ### Summary of Bio.motifs for Finding Motifs in Sequences
  38. [38]
    Bio.Restriction package — Biopython 1.86 documentation
    ### Summary of Bio.Restriction Handling Sequence Features
  39. [39]
    Accessing NCBI's Entrez databases - Biopython
    The Bio.Entrez module makes use of the Entrez Programming Utilities (also known as EUtils), consisting of eight tools that are described in detail on NCBI's ...
  40. [40]
    Swiss-Prot and ExPASy — Biopython 1.86 documentation
    Swiss-Prot is a hand-curated protein sequence database. ExPASy is the web server where Swiss-Prot, Prosite, and Prosite documentation records can be downloaded.
  41. [41]
    Bio.Entrez package — Biopython 1.76 documentation
    Module contents¶. Provides code to access NCBI over the WWW. The main Entrez web page is available at: http://www.ncbi.nlm.nih.gov/Entrez/.
  42. [42]
  43. [43]
    Bio.SwissProt package — Biopython 1.76 documentation
    The Bio.SwissProt package works with the sprotXX.dat file from SwissProt, using classes like Record and Reference to hold data. It can read and parse records.
  44. [44]
    Bio.ExPASy package — Biopython 1.75 documentation
    The Bio.ExPASy package provides code to access resources at ExPASy, including PRODOC, PROSITE, and SwissProt entries.
  45. [45]
    KEGG — Biopython 1.87.dev0 documentation
    Biopython has full support for the querying of the KEGG api. Querying all KEGG endpoints are supported; all methods documented by KEGG (https://www.kegg.jp/kegg ...
  46. [46]
    Bio.KEGG package — Biopython 1.76 documentation
    Module contents¶. Code to work with data from the KEGG database. References: Kanehisa, M. and Goto, S.; KEGG: Kyoto Encyclopedia of Genes and Genomes.
  47. [47]
    Bio.ExPASy.Enzyme module — Biopython 1.75 documentation
    Functions: read Reads a file containing one ENZYME entry. parse Reads a file containing multiple ENZYME entries. Classes: Record Holds ENZYME data.<|control11|><|separator|>
  48. [48]
  49. [49]
    BioSQL package — Biopython 1.76 documentation
    Storing and retrieve biological sequences in a BioSQL relational database. See: http://biopython.org/wiki/BioSQL · http://www.biosql.org/.Missing: integration | Show results with:integration
  50. [50]
  51. [51]
    Multiple Sequence Alignment objects — Biopython 1.86 documentation
    ### Summary of Biopython's Handling of Multiple Sequence Alignments
  52. [52]
    Bio.Align.AlignInfo module — Biopython 1.86 documentation
    ### Summary of Bio.Align.AlignInfo for Computing Scores from Alignments
  53. [53]
    Bio.Align.substitution_matrices package — Biopython 1.86 documentation
    ### Summary of Substitution Matrices in Biopython
  54. [54]
  55. [55]
    Phylogenetics with Bio.Phylo — Biopython 1.87.dev0 documentation
    It aims to provide a common way to work with phylogenetic trees independently of the source data format, as well as a consistent API for I/O operations.Demo: What's In A Tree? · Using Tree And Clade Objects · Search And Traversal Methods
  56. [56]
    Bio.Phylo: A unified toolkit for processing, analyzing and visualizing ...
    Aug 21, 2012 · Phylo is written as a sub-package within the Biopython code base, and is installed along with the Biopython distribution. It has been available ...Implementation · Methods For Tree Inspection... · Table 1
  57. [57]
    Phylo - Working with Phylogenetic Trees - Biopython
    This module provides classes, functions and I/O support for working with phylogenetic trees. For more complete documentation, see the Phylogenetics chapter of ...Utilities · Displaying Trees · Upcoming Gsoc 2013 Features
  58. [58]
    Going 3D: The PDB module — Biopython 1.87.dev0 documentation
    Bio.PDB is a Biopython module that focuses on working with crystal structures of biological macromolecules.
  59. [59]
    PDB File Parser and Structure Class Implemented in Python - PubMed
    Biopython now contains a parser for PDB files that makes the atomic information available in an easy-to-use but powerful data structure.<|control11|><|separator|>
  60. [60]
    nglviewer/nglview: Jupyter widget to interactively view ... - GitHub
    An IPython/Jupyter widget to interactively view molecular structures and trajectories. Utilizes the embeddable NGL Viewer for rendering.
  61. [61]
    Bio.PopGen: Population genetics - Biopython
    Bio.PopGen is a Biopython module supporting population genetics, providing a parser and generator for the GenePop file format.
  62. [62]
    Bio.PopGen package — Biopython 1.83 documentation
    Module contents ... PopGen: Population Genetics and Genomics library in Python. ... Built with Sphinx using a theme provided by Read the Docs. Biopython v: 1.83.<|separator|>
  63. [63]
    Population Genetics in Biopython
    Biopython makes Population Genetics functionality available in the Bio.PopGen module. Documentation on how to access Genepop using Bio.PopGen can be found here.
  64. [64]
    Developing statistics for the Population Genetics Module. - Biopython
    Some statistics require a special kind of marker. For instance Tajima D requires a sequence or a RFLP. Allelic range requires microsatellites/STRs. Other ...Introduction · Different Dimensions · Example Of Statistic...
  65. [65]
  66. [66]
    Bio.Blast.Applications module — Biopython 1.83 documentation
    You would typically run the command line with cline() or via the Python subprocess module, as described in the Biopython tutorial. __init__(cmd=' ...
  67. [67]
  68. [68]
  69. [69]
    Bio.Phylo.Applications package — Biopython 1.83 documentation
    ### Summary of Bio.Phylo.Applications Wrappers
  70. [70]
    Bio.Emboss.Applications module — Biopython 1.83 documentation
    ### Summary of Bio.Emboss.Applications Module
  71. [71]
    Open Bioinformatics Foundation
    The Open Bioinformatics Foundation (OBF) is a non-profit, volunteer-run group that promotes open source software development and Open Science within the ...About OBF · BOSC 2025 · Projects · ISMB CollaborationFest 2025
  72. [72]
  73. [73]
    Biopython 1.86 released - Open Bioinformatics Foundation
    Oct 29, 2025 · Rachel Stern (first contribution); Fabio Zanini; Michiel de Hoon; Oliver Wissett (first contribution); Peter Cock; Samuel Prince (first ...
  74. [74]
    List of active projects for Biopython.
    Current projects · Porting Biopython documentation to Sphinx · Extending Bio.PDB · Population Genetics development · GFF parser · Biogeography · RNA structure.Current Projects · Extending Bio. Pdb · Biogeography
  75. [75]
    Open Bioinformatics Foundation (OBF) - Google Summer of Code
    The OBF is open to anyone who is interested in promoting open source bioinformatics / open science. Please see the Membership page (https://www.open-bio.org/ ...
  76. [76]
    Biopython Contributors
    People are listed here alphabetically by surname. This is only a partial listing, see also the contributor listing in the Biopython source code or the ...Missing: community governance funding
  77. [77]
    Continuous integration - Biopython
    These automated tests in turn collect test coverage which is reported on another separate free service linked into the GitHub ecosystem: Test coverage with ...
  78. [78]
    Projects - Open Bioinformatics Foundation
    BioSQL is meant to be a common data storage layer supported by all the different Bio* projects, Bioperl, Biojava, Biopython, and Bioruby. Entries stored ...
  79. [79]
    Biopython package definitions for the Galaxy Tool Shed (OBSOLETE)
    Jan 10, 2024 · This repository was for the development of the Biopython package definitions shared on the main Tool Shed and Test Tool Shed.
  80. [80]
    scikit-bio: Bioinformatics in Python — scikit-bio
    Scikit-bio is a community-driven Python library for bioinformatics, providing robust, performant, and scalable algorithms for biological data analysis.Documentation · Skbio.stats.composition.clr · Skbio.stats.distance.mantel · InstallMissing: DendroPy | Show results with:DendroPy
  81. [81]
    Learn scikit-bio
    This approach equips readers with the skills to develop their bioinformatics tools and pipelines, emphasizing rapid project initiation over theoretical depth.Missing: Biopython | Show results with:Biopython
  82. [82]
    Bio.Phylo Cookbook. - Biopython
    Convert to a DendroPy or PyCogent tree. The tree objects used by Biopython, DendroPy and PyCogent are different. Nonetheless, all three toolkits support the ...Missing: pipelines scikit-<|separator|>