Python-Skripte einfach ausführen: uv und PEP 723

24. Juni 2025
ℹ️Hinweis zur Quelle

Dieser Blogartikel wurde automatisch erstellt (und übersetzt). Er basiert auf dem folgenden Original, das ich für die Veröffentlichung auf diesem Blog ausgewählt habe:
Fun with uv and PEP 723.

Die Ausführung von Python-Skripten gestaltete sich oft umständlich, da stets sichergestellt werden musste, dass die korrekte Python-Version und alle Abhängigkeiten in der Umgebung vorhanden waren. Dank uv und PEP 723 gehört dies nun der Vergangenheit an.

uv: Ein schneller Paketmanager

uv ist ein extrem schneller Paket- und Projektmanager für Python, der in Rust geschrieben wurde. Er bietet unter anderem ein Tool, das es ermöglicht, ein Python-Tool innerhalb eines Pakets aufzurufen. Dabei kümmert sich uv um die Erstellung einer (zwischengespeicherten) virtuellen Umgebung, die Einrichtung der passenden Python-Version und die Installation aller notwendigen Abhängigkeiten.

PEP 723: Inline-Metadaten für Skripte

PEP 723 ist ein Python Enhancement Proposal, das ein Metadatenformat spezifiziert, welches in einzelne Python-Skripte eingebettet werden kann. Dies soll Launchern, IDEs und anderen externen Tools die Interaktion mit solchen Skripten erleichtern. Ein Beispiel für solche Metadaten:

  requires   = ['requests>=2.28.1']

import requests

response = requests.get('https://example.com')
print(response.status_code)

Kombination von uv und PEP 723

Durch die Kombination von uv und den PEP-723-Metadaten innerhalb eines Python-Skripts lässt sich dieses nun sehr einfach ausführen:

uv run script.py

Anwendungsbeispiel: YouTube-Transkripte extrahieren

Ein praktisches Beispiel ist die Erstellung eines ausführbaren Skripts, das YouTube-Transkripte extrahiert. Hierfür wird ein Python-Skript mit Shebang und Inline-Metadaten erstellt:

#!/usr/bin/env -S uv run --script

  requires   = ["youtube-transcript-api"]

import sys
from youtube_transcript_api import YouTubeTranscriptApi

def get_transcript(video_id):
try:
transcript = YouTubeTranscriptApi.get_transcript(video_id)
text = "\n".join([entry['text'] for entry in transcript])
return text
except Exception as e:
return f"Error: {e}"

if   name   == "  main  ":
if len(sys.argv) < 2:
print('Usage: provide YouTube URL or video_id as argument')
sys.exit(1)

video_id = sys.argv[1]
# Extract video ID from URL if it's a full URL
if "youtube.com" in video_id:
video_id = video_id.split("v=")[1].split("&")[0]
# Assume it's already a video ID

transcript = get_transcript(video_id)
print(transcript)

Die Shebang-Zeile #!/usr/bin/env -S uv run --script ist hierbei entscheidend. Nach dem Speichern des Skripts und dem Ausführbarmachen kann es wie folgt gestartet werden:

./youtube_transcript.py VIDEO_ID

Diese Entwicklung eröffnet neue Möglichkeiten für die nahtlose Ausführung von Python-Code. Während zuvor Tools wie PyInstaller für die Erstellung von eigenständigen Binärdateien bevorzugt wurden, ermöglicht uv nun eine deutlich einfachere Alternative.


Die Kommentare sind geschlossen.