Normale Ansicht

Es gibt neue verfügbare Artikel. Klicken Sie, um die Seite zu aktualisieren.
Ältere BeiträgeKoflers Blog

Hilfe, pip funktioniert nicht mehr!

19. Oktober 2023 um 08:08

pip ist das Paketverwaltungs-Tool von Python. Wenn Sie in einem Script ein Zusatzmodul benötigen, führen Sie einfach pip install xxx bzw. unter macOS und bei manchen Linux-Distributionen pip3 install xxx aus. pip lädt das erforderliche Modul sowie eventuelle Abhängigkeiten herunter und installiert die Pakete lokal (d.h., sie brauchen meine root-Rechte).

Meistens funktioniert pip gut — aber nicht immer. Die häufigste Fehlerquelle unter Windows ist die Parallelinstallation mehrerer Python-Versionen. Dann ist nicht immer klar, auf welche Python-Version sich pip bezieht. Nach meiner Erfahrung scheint pip zumeist die falsche Version zu nehmen. Daher mein Tipp: Vermeiden Sie unter Windows unbedingt die Mehrfachinstallation von Python!

Aber auch unter Linux kann es Probleme geben. Die Ursache hier besteht darin, dass viele Distributionen selbst eine riesige Sammlung von Paketen mit Python-Erweiterungen anbieten. Die Parallelinstallation eines Moduls, einmal mit apt oder dnf und ein zweites Mal mit pip, kann dann zu Konflikten führen — insbesondere dann, wenn nicht exakt dieselben Versionen zum Einsatz kommen. Die Python-Entwickler haben deswegen im ‎Python Enhancement Proposals (PEP) 668 festgeschrieben, dass in solchen Fällen Pakete aus Linux-Repositories vorzuziehen sind. PEP 668 gilt grundsätzlich seit Python 3.11. Tatsächlich implementiert ist es momentan nur in aktuellen Linux-Distributionen:

  • Ubuntu ab Version 23.04
  • Debian ab Version 12
  • Raspberry Pi OS ab dem Bookworm-Release (Okt. 2023)
  • Arch Linux

Noch nicht implementiert ist PEP 668 dagegen unter RHEL und Fedora (auch nicht in Version 39 Beta).

pip-Fehlermeldung

Der Versuch, mit pip ein Modul zu installieren, führt bei aktuellen Debian-, Ubuntu- und Raspberry-Pi-OS-Versionen zur folgenden Fehlermeldung:

$ pip install matplotlib

error: externally-managed-environment
This environment is externally managed

    To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.11/README.venv for more information.

note: If you believe this is a mistake, please contact your Python 
installation or OS distribution provider. You can override this, 
at the risk of breaking your Python installation or OS, by 
passing --break-system-packages. Hint: See PEP 668 for the 
detailed specification.

Lösung 1: Installation des äquivalenten Linux-Pakets

Die obige Fehlermeldung weist direkt auf die beste Lösung hin — nämlich die Installation des entsprechenden Linux-Pakets mit apt python3-xxx, wobei xxx der Paketname ist. Für die matplotlib führen Sie unter Debian, Ubuntu und Raspberry Pi OS das folgende Kommando aus:

sudo apt install python3-matplotlib

Diese Empfehlung ist mit zwei Einschränkungen verbunden: Sie erfordert, dass Sie root– oder sudo-Rechte haben, und sie setzt voraus, dass das gewünschte Modul tatsächlich im Repository Ihrer Linux-Distribution zur Verfügung steht. Letzteres ist oft der Fall, aber nicht immer. Auf pypi.org gibt es fast 500.000 Projekte, die Debian-Standard-Repositories enthalten dagegen »nur« gut 4000 (apt list | grep python3- | wc -l).

Lösung 2: Verwendung einer virtuellen Umgebung

Ein Virtual Environment im Kontext von Python ist ganz einfach ein Projektverzeichnis, in das die für das Projekt erforderlichen Module lokal und projektspezifisch installiert werden. Das hat mehrere Vorteile:

  • Es ist klar, welche Module ein bestimmtes Projekt benötigt. Das Projekt lässt sich später einfacher auf einen anderen Rechner übertragen.
  • Es kann keine Konflikte zwischen unterschiedlichen Projekten geben, die unterschiedliche Module erfordern.
  • Sie sind nicht auf die von Ihrer Linux-Distribution angebotenen Python-Module eingeschränkt und brauchen keine Administratorrechte zur Installation von Linux-Paketen.

Virtuelle Umgebungen werden von Python durch das Modul venv unterstützt. Dieses Modul muss vorweg installiert werden, entweder mit apt install python3-venv oder durch apt install python3-full. Anschließen richten Sie Ihr Projekt ein:

$ python3 -m venv my-project

Python erzeugt das Verzeichnis my-project, falls dieses noch nicht existiert, und richtet dort eine minimale Python-Umgebung ein. (»Minimal« bedeutet: ca. 1500 Dateien, Platzbedarf ca. 25 MByte. Nun ja.) Nun führen Sie in Ihrem Terminal-Fenster mit source das Shell-Script activate aus, um die Umgebung zu aktivieren:

$ cd my-project
$ source bin/activate
(my-project)$ 

In dieser Umgebung funktioniert pip wie gewohnt. In der Folge können Sie Ihr Script ausführen, das die lokal installierte Module nutzt:

(my-project)$ pip install requests beautifulsoup4
(my-project)$ ./my-webscraping-script.py

Anstelle venv direkt zu nutzen, gibt es diverse Tools, um die Verwaltung Ihrer virtuellen Umgebungen zu vereinfachen. Am bekanntesten sind pipenv und virtualenv. Persönlich ist mir pipenv am liebsten. Das Tool muss vorweg installiert werden (apt install pipenv).

Lösung 3: Das Kommando pipx

pipx ist eine Variante zum klassischen pip-Kommando, das sich gleichzeitig um die Einrichtung einer virtuellen Umgebung kümmert (siehe auch die Dokumentation). pipx ist allerdings nicht zur Installation von Bibliotheken gedacht, sondern zur Installation fertiger Python-Programme. Diese werden in .local/bin gespeichert.

pipx ist nur dann eine attraktive Option, wenn Sie ein als Python-Modul verfügbares Programm unkompliziert installieren und ausführen wollen. Wenn Sie dagegen selbst Scripts entwickeln, die von anderen Modulen abhängig sind, ist pipx nicht das richtige Werkzeug.

Lösung 4: Option pip --break-system-packages

Ein vierter Lösungsweg besteht darin, an pip die Option --break-system-packages zu übergeben. Die Option ist weniger schlimm, als ihr Name vermuten lässt. Im Prinzip funktioniert pip jetzt so wie bisher und installiert das gewünschte Modul, ganz egal, ob es ein äquivalentes Paket Ihrer Distribution gibt oder nicht, und unabhängig davon, ob dieses Paket womöglich schon installiert ist.

Empfehlenswert ist der Einsatz dieser Option in CI-Scripts (Continuous Integration), z.B. in Test- oder Deploy-Scripts für git (siehe auch diesen Blog-Beitrag von Louis-Philippe Véronneau). Die Option --break-system-packages ist oft der schnellste und bequemste Weg, nicht mehr funktionierende Scripts wieder zum Laufen zu bringen.

Quellen/Links

Debian 12 »Bookworm«

17. Juni 2023 um 18:33

Debian 12 »Bookworm« vervollständigt den Distributionsreigen der letzten Monate. Debian wird ca. alle zwei Jahre aktualisiert. Die nun präsentierte Version zeichnet sich vor allem durch Software-Updates und ein paar technische Neuerungen aus. Erfreulich ist, dass die für den Betrieb von Netzwerk-Adaptern und anderen Hardware-Komponenten erforderliche Firmware-Dateien nun gleich mitgeliefert wird. Diese pragmatische Entscheidung des Debian-Entwicklerteams erleichtert die Installation von Debian auf aktuellen Notebooks. Davon abgesehen hat sich am Installations-Programm nur wenig geändert. Wenn man die Logik der Dialoge einmal kennt bzw. verstanden hat, lässt sich das Programm aber sehr effizient bedienen. Selbst komplexe Setups inklusive LVM, RAID und Verschlüsselung sind kein Problem.

Das Debian-Installationsprogramm ist optisch keine Glanzleistung, funktioniert dafür aber ausgezeichnet

Während der Installation haben Sie die Wahl zwischen mehreren Desktop-Systemen (Gnome, KDE, XFCE etc.). Ich habe meine Tests mit Gnome durchgeführt.

Debian 12 mit Gnome-43-Desktop

Versionsnummern

Basis             Desktop             Programmierung   Server
---------------   ------------------  ---------------  --------------
Kernel      6.1   Gnome          43   bash        5.2   Apache     2.4
glibc      2.36   Gimp         2.10   docker.io 20.10   CUPS       2.4
X-Server   21.1   LibreOffice   7.4   gcc        12.2   MariaDB  10.11
Wayland    1.21                       git        2.39   OpenSSH    9.2
Mesa       22.3                       Java         17   qemu/KVM   7.2
Systemd     252                       PHP         8.2   Postfix    3.7
NetworkMan 1.42                       Podman      4.3   Samba     4.17
GRUB       2.06                       Python     3.11                  

Generell ist festzustellen, dass die Versionsnummern — eigentlich untypisch für Debian — erfreulich aktuell sind. Insbesondere gilt dies für MariaDB und PHP. Gerade bei MariaDB liefern die meisten anderen Distributionen Uralt-Versionen aus. Debian macht es hier besser! (MySQL fehlt dafür.)

Plattformen (Architekturen)

Debian 12 steht (unverändert im Vergleich zu Debian 11) für die folgenden Plattformen zur Verfügung:

  • Standard-PCs: i386 und amd64
  • ARM: arm64, armhf, armel
  • MIPS: mipsel, mips64el
  • PowerPC: ppc64el
  • S390X: s390x

Weitere Details zur Hardware-Unterstützung können Sie hier nachlesen:

Technische Neuerungen

Firmware-Dateien: Ich habe in der Einleitung darauf hingewiesen, dass die offiziellen Installationsmedien nun auch Firmware-Dateien enthalten. Hinter den Kulissen wurde für diese Dateien die neue Paketquelle non-free-firmware geschaffen, die automatisch aktiv ist.

Logging: Der traditionelle Syslog-Dämon rsyslogd wird standardmäßig nicht mehr installiert. Stattdessen erfolgt das Logging nun über das Journal (eine systemd-Komponente). Die Logging-Daten werden dauerhaft in binärer Form gespeichert (Verzeichnis /var/log/journal) und können mit journalctl ausgewertet werden. Der wichtigste Unterschied im Vergleich zu früher besteht darin, dass diverse Logging-Dateien (z.B. /var/log/mail*) nicht mehr zur Verfügung stehen. Abhilfe schafft gegebenenfalls die Installation von rsyslog. Das Paket befindet sich weiter in den Paketquellen.

Keys für externe Paketquellen: apt-key ist veraltet. Beim Einrichten von neuen Paketquellen muss nun ein Schlüssel in /etc/apt/trusted.gpg.d hinterlegt werden. Auf diesen Schlüssel muss in /apt/sources.list.d/*.conf Bezug genommen werden. Das neue Prozedere ist sicherer, aber leider auch wesentlich umständlicher. Hintergründen können Sie z.B. in der Debian-Dokumentation oder auf syslog.me nachlesen.

Keine anderen Betriebssysteme im GRUB-Menü: Während der Installation verzichtet Debian so wie aktuelle Ubuntu-Versionen darauf, das Script os-prober auszuführen und alle anderen auf den SSDs/Festplatten gefundenen Betriebssysteme in das GRUB-Menü einzubauen. Dieser Schritt ist nicht nur zeitaufwändig, sondern auch überflüssig, weil Sie das zu startende Betriebssystem ja auch über ein EFI-Menü auswählen können. Sollte dabei etwas schief gehen, ist es ganz einfach, den os-prober zu reaktivieren. Dazu fügen Sie die folgende Zeile am Ende von /etc/default/grub ein:

# in /etc/default/grub
GRUB_DISABLE_OS_PROBER=false

Es geht nichts über eine doppelte Verneinung ;-)

Anschließend erzeugen Sie grub.cfg mit einem Aufruf von update-grub neu.

Wartungszeitraum

Anders als bei Ubuntu sind die Angaben zum Wartungszeitraum von Debian ein wenig vage. Grundsätzlich gibt es bei Debian ca. alle zwei Jahre ein neues Release. Das jeweils vorige Release wird dann noch ca. ein Jahr mit Updates versorgt, womit sich ein offizieller Wartungszeitraum von ca. drei Jahren ergibt.

Ein Team von Freiwilligen versucht Debian für die Plattformen i386, amd64, arm64 und armhf über den offiziellen Wartungszeitraum hinaus insgesamt fünf Jahre mit kritischen Sicherheits-Updates zu versorgen (Projekt Debian LTS).

»Bitte legen Sie das Medium mit dem Namen ‚Debian GNU/Linux‘ ein«

Der Standardinstaller hinterlässt in /etc/apt/sources.list eine Zeile mit dem Installationsmedium (USB-Stick oder DVD). Wenn Sie nach der Installation ein Paket installieren wollen (apt install <name>), will apt, dass Sie das Installationsmedium wieder einlegen, anstatt das betreffende Paket einfach herunterzuladen. Das ist (schon seit vielen Jahren) nicht mehr zeitgemäß.

Abhilfe: Öffnen Sie /etc/apt/sources.list mit einem Editor und entfernen Sie die Zeile, die mit deb cdrom beginnt.

Fazit

Debian ist mit »Bookworm« ein grundsolides, überdurchschnittlich modernes Release gelungen. Snaps und Flatpaks sind optional möglich, aber nicht erforderlich. Vielleicht ist das altmodisch, aber ich sehe es als Pluspunkt.

Gerade in Zeiten, wo dem Linux-Desktop ein rauer Wind entgegen weht (Red Hat will keine LibreOffice-Pakete mehr erstellen, SUSE überhaupt keine kommerzielle Desktop-Distribution mehr anbieten usw.) ist es großartig, dass Debian nicht nur am Server brilliert, sondern auch ein gutes Angebot für Desktop-User darstellt.

Ich habe es in meinen früheren Debian-Artikel schon erwähnt, aber man kann es nicht oft genug sagen: Debian ist das Fundament für eine große Palette weiterer Distributionen: Ubuntu und all seine Varianten, Kali Linux, Raspberry Pi OS usw. Die Linux-Community kann dem Debian-Team gar nicht dankbar genug sein, dass es dieses Fundament immer wieder neu zusammenstellt!

Quellen/Links

Andere Tests

❌
❌