HH maczarr.de

Tooltip: Mit pipx Python-Programme auch unter Python 3.11 systemweit installieren

Kürzlich wollte ich mir OpenAIs kostenloses Tool Whisper installieren, zum automatischen transkribieren von Audio-Mitschnitten. Zu dem Zeitpunkt war Whisper allerdings nur mit Python bis einschließlich Version 3.10 kompatibel – mein System war bereits auf Python 3.11 – es musste also eine Lösung her.

Was ist Whisper?

Auch wenn es nicht Kern dieses Textes ist, möchte ich doch auch kurz Whisper vorstellen, da ich finde, dass es ein tolles Programm ist. Whisper ist eine Open Source Software von OpenAI um Sprache in Text zu wandeln, sogenanntes STT (Speech-To-Text). Das Tool ist beispielsweise sehr nützlich um damit automatisiert Untertitel für Videos zu erstellen. Man wirft ihm einfach die Tonspur des Videos vor und bekommt anschließend eine Datei mit dem erkannten Text und Zeitstempeln heraus – komplett fertig für Video-Portale wie YouTube. Außerdem kann Whisper auch eine englische Übersetzung anfertigen. Die Video-Editor-Software Kdenlive hat seit Kurzem auch eine Whisper-Integration.

Python 3.11

Laut Projektseite war Whisper kompatibel mit Python 3.8 bis 3.10 – aktuell war inzwischen allerdings Python 3.11 und das verlangt vom User Python-Module nicht mehr global zu installieren, sondern in Virtual Environments. Möchte man nun ein Modul global installieren kann man das zwar mit einem zusätzlichen Parameter (--break-system-packages) weiterhin tun, sollte es allerdings besser über die Paketverwaltung des Betriebssystems machen, also z.B. via apt install python3-MODULNAME.

Zum einen gibt es jedoch nicht jedes Python-Modul auch als Paket in den Paketquellen des Betriebssystems, zum Anderen war Whisper aber auch einfach nicht mit Python 3.11 kompatibel.

Ich installierte mir also erstmal parallel Python 3.10 im System, sodass es als python3.10 zur Verfügung stand, da ich nicht mein systemweites python3 downgraden wollte.

Möglichkeit 1: Virtual Environment (venv)

Um Whisper nun in einem Virtual Environment mit Python 3.10 zu installieren, geht man wie folgt vor:

sudo apt install virtualenv
mkdir -p ~/whisper
cd ~/whisper
virtualenv -p `which python3.10` ~/whisper/
source ~/whisper/bin/activate
pip install torch torchvision torchaudio ffmpeg
pip install git+https://github.com/openai/whisper.git

Wir legen hier ein Verzeichnis namens whisper im Home-Verzeichnis des Users an und benutzen es als Virtual Environment mit Python 3.10 (virtualenv -p `which python3.10` ~/whisper/) um es anschließend zu aktivieren (source ~/whisper/bin/activate).
Danach können nun im Virtual Environment die Abhängigkeiten laut Whisper-Projektseite installiert werden und anschließend Whisper selbst.

Solange das Virtual Environment nun aktiv ist steht Whisper als Python-Modul im venv zur Verfügung und kann als Kommandozeilen-Tool aufgerufen werden.

Das Virtual Environment verlässt man wieder mittels des Befehls deactivate. Um es wieder zu aktivieren braucht man erneut source ~/whisper/bin/activate.

Daran merkt man auch schon den Nachteil dieser Methode: Möchte man Whisper nicht als Python-Modul in einem Projekt verwenden, sondern eher als global zugängliches Tool, ist es umständlich jedes Mal das Virtual Environment zu aktivieren.

Möglichkeit 2: Global installieren mit pipx

pipx ist ein Tool, dass es einem ermöglicht Python Programme in isolierten Umgebungen zu installieren und sie trotzdem global zur Verfügung zu stellen. Wir können also mit Hilfe von pipx Whisper in einer Python 3.10-Umgebung installieren und es trotzdem global nutzen, wo wir eigentlich Python 3.11 haben.

Wie oben schon geschrieben, muss auch für diese Variante Python 3.10 parallel zur Verfügung stehen.

Zuerst muss nun pipx global installiert werden, wofür wir besagten zusätzlichen Parameter brauchen:

python3 -m pip install --user pipx --break-system-packages

Anschließend kann nun openai-whisper mittels `pipx` in einer Python 3.10-Umgebung installiert werden:

pipx install openai-whisper --python=python3.10

Das war's! Ab jetzt kann whisper einfach auf der Kommandozeile verwendet werden, ohne dass dafür erstmal von Hand ein Virtual Environment aktiviert werden muss.

Und diese Variante mit pipx kann selbstverständlich auch benutzt werden ohne dass eine andere Python-Version als die Systemversion gebraucht wird.

Beide Varianten habe ihre Vor- und Nachteile. Möglichkeit 1 eignet sich gut, wenn man selbst an einem Python-Projekt arbeitet und Whisper darin als Python-Modul nutzen möchte.
Möchte man hingegen einfach nur Whisper möglichst global als Kommandozeilen-Tool verwenden, ist Möglichkeit 2 die bessere Wahl.

Coverbild by Chris Ried on Unsplash