Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 197% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 124% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 737% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 761% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 434% | 0% |
Biopython is a comprehensive set of freely available Python tools for biological computation. It provides functionality for sequence manipulation, file I/O, database access, structural bioinformatics, phylogenetics, and many other bioinformatics tasks. The current version is Biopython 1.87 (released 30 March 2026). It supports Python 3.10-3.14 and PyPy3.10, and requires NumPy. Biopython 1.87 also addresses CVE-2025-68463 in Bio.Entrez.Parser when parsing untrusted files, so prefer 1.87+ for workflows that parse externally supplied Entrez XML.
Use this skill when:
Biopython is organized into modular sub-packages, each addressing specific bioinformatics domains:
Install the current stable Biopython release with an explicit version pin for reproducibility:
bashuv pip install "biopython==1.87"
For NCBI database access, always set your email address (required by NCBI). For reusable software, set a stable Entrez.tool value and register the tool/email with NCBI. For higher rate limits (10 req/s instead of 3 req/s), read only NCBI_API_KEY from the environment — do not hardcode keys or load unrelated environment variables:
pythonimport os from Bio import Entrez Entrez.email = "your.email@example.com" # required — use your real email Entrez.tool = "your_tool_name" # optional but recommended for reusable software # Optional: register at https://www.ncbi.nlm.nih.gov/account/settings/ if api_key := os.environ.get("NCBI_API_KEY"): Entrez.api_key = api_key
This skill provides comprehensive documentation organized by functionality area. When working on a task, consult the relevant reference documentation:
Reference: references/sequence_io.md
Use for:
Quick example:
pythonfrom Bio import SeqIO # Read sequences from FASTA file for record in SeqIO.parse("sequences.fasta", "fasta"): print(f"{record.id}: {len(record.seq)} bp") # Convert GenBank to FASTA SeqIO.convert("input.gb", "genbank", "output.fasta", "fasta")
Reference: references/alignment.md
Use for:
Quick example:
pythonfrom Bio import Align # Pairwise alignment aligner = Align.PairwiseAligner() aligner.mode = 'global' alignments = aligner.align("ACCGGT", "ACGGT") print(alignments[0])
Reference: references/databases.md
Use for:
Quick example:
pythonfrom Bio import Entrez Entrez.email = "your.email@example.com" # Search PubMed handle = Entrez.esearch(db="pubmed", term="biopython", retmax=10) results = Entrez.read(handle) handle.close() print(f"Found {results['Count']} results")
Reference: references/blast.md
Use for:
Quick example:
pythonfrom Bio.Blast import NCBIWWW, NCBIXML # Run BLAST search result_handle = NCBIWWW.qblast("blastn", "nt", "ATCGATCGATCG") blast_record = NCBIXML.read(result_handle) # Display top hits for alignment in blast_record.alignments[:5]: print(f"{alignment.title}: E-value={alignment.hsps[0].expect}")
Reference: references/structure.md
Use for:
Quick example:
pythonfrom Bio.PDB import PDBParser # Parse structure parser = PDBParser(QUIET=True) structure = parser.get_structure("1crn", "1crn.pdb") # Calculate distance between alpha carbons chain = structure[0]["A"] distance = chain[10]["CA"] - chain[20]["CA"] print(f"Distance: {distance:.2f} Å")
Reference: references/phylogenetics.md
Use for:
Quick example:
pythonfrom Bio import Phylo # Read and visualize tree tree = Phylo.read("tree.nwk", "newick") Phylo.draw_ascii(tree) # Calculate distance distance = tree.distance("Species_A", "Species_B") print(f"Distance: {distance:.3f}")
Reference: references/advanced.md
Use for:
Quick example:
pythonfrom Bio.SeqUtils import gc_fraction, molecular_weight from Bio.Seq import Seq seq = Seq("ATCGATCGATCG") print(f"GC content: {gc_fraction(seq):.2%}") print(f"Molecular weight: {molecular_weight(seq, seq_type='DNA'):.2f} g/mol")
When a user asks about a specific Biopython task:
Example search patterns for reference files:
bash# Find information about specific functions rg -n "SeqIO.parse" references/sequence_io.md # Find examples of specific tasks rg -n "BLAST" references/blast.md # Find information about specific concepts rg -n "alignment" references/alignment.md
Follow these principles when writing Biopython code:
python from Bio import SeqIO, Entrez from Bio.Seq import Seq
NCBI_API_KEY from the environment if presentpython import os from Bio import Entrez
Entrez.email = "your.email@example.com" Entrez.tool = "your_tool_name" if api_key := os.environ.get("NCBI_API_KEY"): Entrez.api_key = api_key
python # Common formats: "fasta", "genbank", "fastq", "clustal", "phylip"
python with open("file.fasta") as handle: records = SeqIO.parse(handle, "fasta")
python for record in SeqIO.parse("large_file.fasta", "fasta"): # Process one record at a time
python from urllib.error import HTTPError
try: handle = Entrez.efetch(db="nucleotide", id=accession) except HTTPError as e: print(f"Error: {e}")
pythonfrom Bio import Entrez, SeqIO Entrez.email = "your.email@example.com" # Fetch sequence handle = Entrez.efetch(db="nucleotide", id="EU490707", rettype="gb", retmode="text") record = SeqIO.read(handle, "genbank") handle.close() print(f"Description: {record.description}") print(f"Sequence length: {len(record.seq)}")
pythonfrom Bio import SeqIO from Bio.SeqUtils import gc_fraction for record in SeqIO.parse("sequences.fasta", "fasta"): # Calculate statistics gc = gc_fraction(record.seq) length = len(record.seq) # Find ORFs, translate, etc. protein = record.seq.translate() print(f"{record.id}: {length} bp, GC={gc:.2%}")
pythonfrom Bio.Blast import NCBIWWW, NCBIXML from Bio import Entrez, SeqIO Entrez.email = "your.email@example.com" # Run BLAST result_handle = NCBIWWW.qblast("blastn", "nt", sequence) blast_record = NCBIXML.read(result_handle) # Get top hit accessions accessions = [aln.accession for aln in blast_record.alignments[:5]] # Fetch sequences for acc in accessions: handle = Entrez.efetch(db="nucleotide", id=acc, rettype="fasta", retmode="text") record = SeqIO.read(handle, "fasta") handle.close() print(f">{record.description}")
pythonfrom Bio import AlignIO, Phylo from Bio.Phylo.TreeConstruction import DistanceCalculator, DistanceTreeConstructor # Read alignment alignment = AlignIO.read("alignment.fasta", "fasta") # Calculate distances calculator = DistanceCalculator("identity") dm = calculator.get_distance(alignment) # Build tree constructor = DistanceTreeConstructor() tree = constructor.nj(dm) # Visualize Phylo.draw_ascii(tree)
Solution: This is just a warning. Set Entrez.email to suppress it.
Solution: Check that IDs/accessions are valid and properly formatted.
Solution: Verify file format matches the specified format string.
Solution: Ensure sequences are aligned before using AlignIO or MultipleSeqAlignment.
Solution: Use local BLAST for large-scale searches, or cache results.
Solution: Use PDBParser(QUIET=True) to suppress warnings, or investigate structure quality.
Solution: These modules were removed in Biopython 1.86. Use hmmlearn for HMMs and the standard library subprocess module instead of Bio.Application CLI wrappers.
Solution: The default gap score changed from 0 to -1 in 1.86, eliminating trivial tie alignments. Set aligner.gap_score = 0 to restore the old behavior if needed (see references/alignment.md).
To locate information in reference files, use these search patterns:
bash# Search for specific functions rg -n "function_name" references/*.md # Find examples of specific tasks rg -n "example" references/sequence_io.md # Find all occurrences of a module rg -n "Bio.Seq" references/*.md
Biopython provides comprehensive tools for computational molecular biology. When using this skill:
references/ directoryThe modular reference documentation ensures detailed, searchable information for every major Biopython capability.
Other measured skills in the registry, with their headline benchmark lift.