Biopython: Computational Molecular Biology in Python
Überblick
Biopython ist eine umfassende Sammlung von frei verfügbaren Python-Werkzeugen für biologische Berechnungen. Es bietet Funktionalitäten für Sequenzmanipulation, Datei-I/O, Datenbankzugriff, strukturelle Bioinformatik, Phylogenetik und viele andere Bioinformatik-Aufgaben. Die aktuelle Version ist Biopython 1.87 (veröffentlicht am 30. März 2026). Es unterstützt Python 3.10-3.14 und PyPy3.10 und benötigt NumPy. Biopython 1.87 adressiert auch CVE-2025-68463 in Bio.Entrez.Parser beim Parsen von nicht vertrauenswürdigen Dateien, daher bevorzugen Sie 1.87+ für Workflows, die extern bereitgestellte Entrez-XML parsen.
Wann dieses Skill verwendet werden sollte
Verwenden Sie dieses Skill, wenn:
- Sie mit biologischen Sequenzen (DNA, RNA oder Protein) arbeiten
- Sie biologische Dateiformate (FASTA, GenBank, FASTQ, PDB, mmCIF usw.) lesen, schreiben oder konvertieren
- Sie über Entrez auf NCBI-Datenbanken (GenBank, PubMed, Protein, Gene usw.) zugreifen
- Sie BLAST-Suchen durchführen oder BLAST-Ergebnisse parsen
- Sie Sequenzalignments (paarweise oder multiple Sequenzalignments) durchführen
- Sie Proteinstrukturen aus PDB-Dateien analysieren
- Sie phylogenetische Bäume erstellen, manipulieren oder visualisieren
- Sie Sequenzmotive finden oder Motivmuster analysieren
- Sie Sequenzstatistiken berechnen (GC-Gehalt, Molekulargewicht, Schmelztemperatur usw.)
- Sie strukturelle Bioinformatik-Aufgaben durchführen
- Sie mit populationsgenetischen Daten arbeiten
- Jede andere computergestützte molekularbiologische Aufgabe
Kernfähigkeiten
Biopython ist in modulare Unterpakete organisiert, die jeweils spezifische Bioinformatik-Domänen abdecken:
- Sequenzverarbeitung - Bio.Seq und Bio.SeqIO für Sequenzmanipulation und Datei-I/O
- Alignments-Analyse - Bio.Align und Bio.AlignIO für paarweise und multiple Sequenzalignments
- Datenbankzugriff - Bio.Entrez für programmatischen Zugriff auf NCBI-Datenbanken
- BLAST-Operationen - Bio.Blast zum Ausführen und Parsen von BLAST-Suchen
- Strukturelle Bioinformatik - Bio.PDB für die Arbeit mit 3D-Proteinstrukturen
- Phylogenetik - Bio.Phylo für Manipulation und Visualisierung phylogenetischer Bäume
- Erweiterte Funktionen - Motive, Populationsgenetik, Sequenzhilfsfunktionen und mehr
Installation und Einrichtung
Installieren Sie die aktuelle stabile Biopython-Version mit einem expliziten Versions-Pin für Reproduzierbarkeit:
uv pip install "biopython==1.87"
Für den Zugriff auf NCBI-Datenbanken setzen Sie immer Ihre E-Mail-Adresse (von NCBI verlangt). Für wiederverwendbare Software setzen Sie einen stabilen Entrez.tool-Wert und registrieren Sie das Tool/die E-Mail bei NCBI. Für höhere Ratenlimits (10 req/s statt 3 req/s) lesen Sie nur NCBI_API_KEY aus der Umgebung – harten Sie keine Schlüssel ein und laden Sie keine nicht zusammenhängenden Umgebungsvariablen:
import os
from Bio import Entrez
Entrez.email = "[email protected]" # erforderlich – verwenden Sie Ihre echte E-Mail
Entrez.tool = "your_tool_name" # optional, aber empfohlen für wiederverwendbare Software
# Optional: Registrieren Sie sich unter https://www.ncbi.nlm.nih.gov/account/settings/
if api_key := os.environ.get("NCBI_API_KEY"):
Entrez.api_key = api_key
Verwendung dieses Skills
Dieses Skill bietet umfassende Dokumentation, organisiert nach Funktionsbereichen. Wenn Sie an einer Aufgabe arbeiten, konsultieren Sie die relevante Referenzdokumentation:
1. Sequenzverarbeitung (Bio.Seq & Bio.SeqIO)
Referenz: references/sequence_io.md
Verwenden für:
- Erstellen und Manipulieren biologischer Sequenzen
- Lesen und Schreiben von Sequenzdateien (FASTA, GenBank, FASTQ usw.)
- Konvertieren zwischen Dateiformaten
- Extrahieren von Sequenzen aus großen Dateien
- Sequenzübersetzung, Transkription und reverse Komplement
- Arbeiten mit SeqRecord-Objekten
Kurzbeispiel:
from Bio import SeqIO
# Sequenzen aus FASTA-Datei lesen
for record in SeqIO.parse("sequences.fasta", "fasta"):
print(f"{record.id}: {len(record.seq)} bp")
# GenBank in FASTA konvertieren
SeqIO.convert("input.gb", "genbank", "output.fasta", "fasta")
2. Alignments-Analyse (Bio.Align & Bio.AlignIO)
Referenz: references/alignment.md
Verwenden für:
- Paarweise Sequenzalignment (global und lokal)
- Lesen und Schreiben multipler Sequenzalignments
- Verwenden von Substitutionsmatrizen (BLOSUM, PAM)
- Berechnen von Alignments-Statistiken
- Anpassen von Alignments-Parametern
Kurzbeispiel:
from Bio import Align
# Paarweises Alignment
aligner = Align.PairwiseAligner()
aligner.mode = 'global'
alignments = aligner.align("ACCGGT", "ACGGT")
print(alignments[0])
3. Datenbankzugriff (Bio.Entrez)
Referenz: references/databases.md
Verwenden für:
- Durchsuchen von NCBI-Datenbanken (PubMed, GenBank, Protein, Gene usw.)
- Herunterladen von Sequenzen und Datensätzen
- Abrufen von Publikationsinformationen
- Finden verwandter Datensätze über Datenbanken hinweg
- Batch-Download mit angemessener Ratenbegrenzung
Kurzbeispiel:
from Bio import Entrez
Entrez.email = "[email protected]"
# PubMed durchsuchen
handle = Entrez.esearch(db="pubmed", term="biopython", retmax=10)
results = Entrez.read(handle)
handle.close()
print(f"{results['Count']} Ergebnisse gefunden")
4. BLAST-Operationen (Bio.Blast)
Referenz: references/blast.md
Verwenden für:
- Ausführen von BLAST-Suchen über NCBI-Webdienste
- Ausführen lokaler BLAST-Suchen
- Parsen von BLAST-XML-Ausgaben
- Filtern von Ergebnissen nach E-Wert oder Identität
- Extrahieren von Treffersequenzen
Kurzbeispiel:
from Bio.Blast import NCBIWWW, NCBIXML
# BLAST-Suche ausführen
result_handle = NCBIWWW.qblast("blastn", "nt", "ATCGATCGATCG")
blast_record = NCBIXML.read(result_handle)
# Top-Treffer anzeigen
for alignment in blast_record.alignments[:5]:
print(f"{alignment.title}: E-Wert={alignment.hsps[0].expect}")
5. Strukturelle Bioinformatik (Bio.PDB)
Referenz: references/structure.md
Verwenden für:
- Parsen von PDB- und mmCIF-Strukturdateien
- Navigieren in der Proteinstruktur-Hierarchie (SMCRA: Struktur/Modell/Kette/Rest/Atom)
- Berechnen von Abständen, Winkeln und Diederwinkeln
- Sekundärstrukturzuweisung (DSSP)
- Strukturüberlagerung und RMSD-Berechnung
- Extrahieren von Sequenzen aus Strukturen
Kurzbeispiel:
from Bio.PDB import PDBParser
# Struktur parsen
parser = PDBParser(QUIET=True)
structure = parser.get_structure("1crn", "1crn.pdb")
# Abstand zwischen Alpha-Kohlenstoffen berechnen
chain = structure[0]["A"]
distance = chain[10]["CA"] - chain[20]["CA"]
print(f"Abstand: {distance:.2f} Å")
6. Phylogenetik (Bio.Phylo)
Referenz: references/phylogenetics.md
Verwenden für:
- Lesen und Schreiben phylogenetischer Bäume (Newick, NEXUS, phyloXML)
- Erstellen von Bäumen aus Distanzmatrizen oder Alignments
- Baummanipulation (Beschneiden, Neuwurzeln, Ladderizing)
- Berechnen phylogenetischer Distanzen
- Erstellen von Konsensusbäumen
- Visualisieren von Bäumen
Kurzbeispiel:
from Bio import Phylo
# Baum lesen und visualisieren
tree = Phylo.read("tree.nwk", "newick")
Phylo.draw_ascii(tree)
# Distanz berechnen
abstand = tree.distance("Species_A", "Species_B")
print(f"Abstand: {abstand:.3f}")
7. Erweiterte Funktionen
Referenz: references/advanced.md
Verwenden für:
- Sequenzmotive (Bio.motifs) - Finden und Analysieren von Motivmustern
- Populationsgenetik (Bio.PopGen) - GenePop-Dateien, Fst-Berechnungen, Hardy-Weinberg-Tests
- Sequenzhilfsfunktionen (Bio.SeqUtils) - GC-Gehalt, Schmelztemperatur, Molekulargewicht, Proteinanalyse
- Restriktionsanalyse (Bio.Restriction) - Finden von Restriktionsenzym-Schnittstellen
- Clustering (Bio.Cluster) - K-Means und hierarchisches Clustering
- Genomdiagramme (GenomeDiagram) - Visualisieren genomischer Merkmale
Kurzbeispiel:
from Bio.SeqUtils import gc_fraction, molecular_weight
from Bio.Seq import Seq
seq = Seq("ATCGATCGATCG")
print(f"GC-Gehalt: {gc_fraction(seq):.2%}")
print(f"Molekulargewicht: {molecular_weight(seq, seq_type='DNA'):.2f} g/mol")
Allgemeine Workflow-Richtlinien
Dokumentation lesen
Wenn ein Benutzer nach einer spezifischen Biopython-Aufgabe fragt:
- Identifizieren Sie das relevante Modul basierend auf der Aufgabenbeschreibung
- Lesen Sie die entsprechende Referenzdatei mit dem Read-Tool
- Extrahieren Sie relevante Code-Muster und passen Sie sie an die spezifischen Bedürfnisse des Benutzers an
- Kombinieren Sie mehrere Module, wenn die Aufgabe dies erfordert
Beispiel-Suchmuster für Referenzdateien:
# Informationen zu bestimmten Funktionen finden
rg -n "SeqIO.parse" references/sequence_io.md
# Beispiele für bestimmte Aufgaben finden
rg -n "BLAST" references/blast.md
# Informationen zu bestimmten Konzepten finden
rg -n "alignment" references/alignment.md
Biopython-Code schreiben
Folgen Sie diesen Prinzipien beim Schreiben von Biopython-Code:
-
Module explizit importieren
from Bio import SeqIO, Entrez from Bio.Seq import Seq -
Entrez-E-Mail setzen bei Verwendung von NCBI-Datenbanken; laden Sie nur
NCBI_API_KEYaus der Umgebung, falls vorhandenimport os from Bio import Entrez Entrez.email = "[email protected]" Entrez.tool = "your_tool_name" if api_key := os.environ.get("NCBI_API_KEY"): Entrez.api_key = api_key -
Geeignete Dateiformate verwenden - Prüfen Sie, welches Format am besten für die Aufgabe geeignet ist
# Häufige Formate: "fasta", "genbank", "fastq", "clustal", "phylip" -
Dateien ordnungsgemäß behandeln - Schließen Sie Handles nach Gebrauch oder verwenden Sie Kontextmanager
with open("file.fasta") as handle: records = SeqIO.parse(handle, "fasta") -
Iteratoren für große Dateien verwenden - Vermeiden Sie, alles in den Speicher zu laden
for record in SeqIO.parse("large_file.fasta", "fasta"): # Verarbeiten Sie einen Datensatz nach dem anderen -
Fehler ordnungsgemäß behandeln - Netzwerkoperationen und Dateiparsing können fehlschlagen
from urllib.error import HTTPError try: handle = Entrez.efetch(db="nucleotide", id=accession) except HTTPError as e: print(f"Fehler: {e}")
Häufige Muster
Muster 1: Sequenz von GenBank abrufen
from Bio import Entrez, SeqIO
Entrez.email = "[email protected]"
# Sequenz abrufen
handle = Entrez.efetch(db="nucleotide", id="EU490707", rettype="gb", retmode="text")
record = SeqIO.read(handle, "genbank")
handle.close()
print(f"Beschreibung: {record.description}")
print(f"Sequenzlänge: {len(record.seq)}")
Muster 2: Sequenzanalyse-Pipeline
from Bio import SeqIO
from Bio.SeqUtils import gc_fraction
for record in SeqIO.parse("sequences.fasta", "fasta"):
# Statistiken berechnen
gc = gc_fraction(record.seq)
laenge = len(record.seq)
# ORFs finden, übersetzen usw.
protein = record.seq.translate()
print(f"{record.id}: {laenge} bp, GC={gc:.2%}")
Muster 3: BLAST und Top-Treffer abrufen
from Bio.Blast import NCBIWWW, NCBIXML
from Bio import Entrez, SeqIO
Entrez.email = "[email protected]"
# BLAST ausführen
result_handle = NCBIWWW.qblast("blastn", "nt", sequence)
blast_record = NCBIXML.read(result_handle)
# Top-Treffer-Zugriffsnummern abrufen
accessions = [aln.accession for aln in blast_record.alignments[:5]]
# Sequenzen abrufen
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}")
Muster 4: Phylogenetischen Baum aus Sequenzen erstellen
from Bio import AlignIO, Phylo
from Bio.Phylo.TreeConstruction import DistanceCalculator, DistanceTreeConstructor
# Alignment lesen
alignment = AlignIO.read("alignment.fasta", "fasta")
# Abstände berechnen
calculator = DistanceCalculator("identity")
dm = calculator.get_distance(alignment)
# Baum erstellen
constructor = DistanceTreeConstructor()
tree = constructor.nj(dm)
# Visualisieren
Phylo.draw_ascii(tree)
Best Practices
- Lesen Sie immer die relevante Referenzdokumentation, bevor Sie Code schreiben
- Verwenden Sie grep, um Referenzdateien nach bestimmten Funktionen oder Beispielen zu durchsuchen
- Validieren Sie Dateiformate vor dem Parsen
- Behandeln Sie fehlende Daten ordnungsgemäß - Nicht alle Datensätze haben alle Felder
- Zwischenspeichern Sie heruntergeladene Daten - Laden Sie nicht wiederholt dieselben Sequenzen herunter
- Respektieren Sie NCBI-Ratenlimits - Verwenden Sie API-Schlüssel, registrierte Tool-/E-Mail-Werte für wiederverwendbare Software und Entrez-Verlauf/Batching für große Aufträge
- Testen Sie mit kleinen Datensätzen, bevor Sie große Dateien verarbeiten
- Halten Sie Biopython aktuell, um die neuesten Funktionen und Fehlerbehebungen zu erhalten
- Verwenden Sie geeignete genetische Codetabellen für die Übersetzung
- Dokumentieren Sie Analyseparameter für Reproduzierbarkeit
Fehlerbehebung bei häufigen Problemen
Problem: „No handlers could be found for logger 'Bio.Entrez'“
Lösung: Dies ist nur eine Warnung. Setzen Sie Entrez.email, um sie zu unterdrücken.
Problem: „HTTP Error 400“ von NCBI
Lösung: Überprüfen Sie, ob IDs/Zugriffsnummern gültig und ordnungsgemäß formatiert sind.
Problem: „ValueError: EOF“ beim Parsen von Dateien
Lösung: Überprüfen Sie, ob das Dateiformat mit der angegebenen Formatzeichenfolge übereinstimmt.
Problem: Alignment schlägt fehl mit „sequences are not the same length“
Lösung: Stellen Sie sicher, dass Sequenzen vor der Verwendung von AlignIO oder MultipleSeqAlignment aligniert sind.
Problem: BLAST-Suchen sind langsam
Lösung: Verwenden Sie lokales BLAST für groß angelegte Suchen oder cachen Sie Ergebnisse.
Problem: PDB-Parser-Warnungen
Lösung: Verwenden Sie PDBParser(QUIET=True), um Warnungen zu unterdrücken, oder untersuchen Sie die Strukturqualität.
Problem: ImportError für Bio.HMM, Bio.MarkovModel oder Bio.Application
Lösung: Diese Module wurden in Biopython 1.86 entfernt. Verwenden Sie hmmlearn für HMMs und das Standardbibliotheksmodul subprocess anstelle der Bio.Application-CLI-Wrapper.
Problem: PairwiseAligner gibt nach Upgrade auf 1.86+ weniger Alignments zurück
Lösung: Der Standard-Gap-Score wurde in 1.86 von 0 auf -1 geändert, wodurch triviale Gleichstand-Alignments eliminiert werden. Setzen Sie aligner.gap_score = 0, um das alte Verhalten wiederherzustellen, falls erforderlich (siehe references/alignment.md).
Zusätzliche Ressourcen
- Offizielle Dokumentation: https://biopython.org/docs/latest/
- Tutorial: https://biopython.org/docs/latest/Tutorial/
- Cookbook: https://biopython.org/docs/latest/Tutorial/ (fortgeschrittene Beispiele)
- GitHub: https://github.com/biopython/biopython
- Release Notes: https://biopython.org/wiki/Download
- Mailingliste: https://biopython.org/wiki/Mailing_lists