anazhir
Goto Top

Zerschossene Python Installationen verursachen unerfüllte Abhängigkeiten apt

Guten Tag und danke, dass du dich meiner Frage annimmst.

Ich habe in der Vergangenheit aus verschiedenen Gründen verschiedene Python Versionen auf meinem Server installiert. Als ich kürzlich Probleme bei der Installation eines python Plugins hatte, dachte ich es sei eine gute Idee die verschiedenen Installation aufzuräumen. Mein Plan war: alle Python Versionen komplett deinstallieren und eine neue Version installieren. Leider war die verwendete Anleitung mist. Sie verlangte von mir System-Links zu löschen und Programmordner zu löschen. Das Backup von vor der Zeit war leider korrupt. Jetzt kann ich python weder installieren, doch deinstallieren und bei der Durchführung von bspw. apt upgrade erhalte ich folgende Fehlermeldung:
apt upgrade
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Probieren Sie »apt --fix-broken install«, um dies zu korrigieren.
Die folgenden Pakete haben unerfüllte Abhängigkeiten:
 exfalso : Hängt ab von: python (>= 2.7.3-4+deb7u1) ist aber nicht installiert
           Hängt ab von: python-gi ist aber nicht installiert
           Hängt ab von: python-gi-cairo ist aber nicht installiert
           Hängt ab von: python-mutagen (>= 1.32) ist aber nicht installiert
           Hängt ab von: python:any (< 2.8)
           Hängt ab von: python:any (>= 2.7.5-5~)
           Empfiehlt: python-musicbrainzngs (>= 0.5) ist aber nicht installiert
 gdebi : Hängt ab von: gksu ist aber nicht installiert
 gimp : Hängt ab von: python-gtk2 (>= 2.8.0) ist aber nicht installiert
        Hängt ab von: python2.7 ist aber nicht installiert
        Hängt ab von: python:any (>= 2.6.6-7~)
 ndiff : Hängt ab von: python-lxml ist aber nicht installiert
         Hängt ab von: python:any (< 2.8)
         Hängt ab von: python:any (>= 2.7.5-5~)
 yum : Hängt ab von: python (>= 2.7) ist aber nicht installiert
       Hängt ab von: python-lzma ist aber nicht installiert
       Hängt ab von: python-rpm ist aber nicht installiert
       Hängt ab von: python-sqlite ist aber nicht installiert
       Hängt ab von: python-sqlitecachec ist aber nicht installiert
       Hängt ab von: python-urlgrabber ist aber nicht installiert
       Hängt ab von: python (< 2.8) ist aber nicht installiert
E: Unerfüllte Abhängigkeiten. Versuchen Sie »apt --fix-broken install« ohne Angabe eines Pakets (oder geben Sie eine Lösung an).

Ausgabe von apt --fix-broken install:
apt --fix-broken install
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Abhängigkeiten werden korrigiert ... Fertig
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
  fonts-font-awesome fonts-lato gconf-service gconf2-common gdebi-core gir1.2-evince-3.0 gir1.2-gconf-2.0 gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 gir1.2-gtksource-3.0
  gir1.2-javascriptcoregtk-4.0 gir1.2-keybinder-3.0 gir1.2-soup-2.4 gir1.2-sugarext-1.0 gir1.2-webkit2-4.0 gstreamer1.0-alsa gstreamer1.0-pulseaudio libamd2 libavahi-gobject0 libbabl-0.1-0
  libcamd2 libccolamd2 libcholmod3 libgconf-2-4 libgegl-0.3-0 libgpod-common libgpod4 libgstreamer-plugins-bad1.0-0 libgtksourceview-3.0-1 libgtksourceview-3.0-common libgtop-2.0-10
  libgtop2-common libjavascriptcoregtk-4.0-18 libjs-modernizr libldb1 libmetis5 libmission-control-plugins0 libmng1 libnm-glib4 libnm-util2 libpython-stdlib libraw15 libsgutils2-2
  libsqlite0 libsugarext-data libsugarext0 libtalloc2 libtelepathy-glib0 libtevent0 libtidy5 libumfpack5 libwbclient0 libwebkit2gtk-4.0-37 python-libxml2 samba-common
  sphinx-rtd-theme-common telepathy-mission-control-5 telepathy-salut
Verwenden Sie »apt autoremove«, um sie zu entfernen.
Die folgenden Pakete werden ENTFERNT:
  exfalso gdebi gimp ndiff yum
0 aktualisiert, 0 neu installiert, 5 zu entfernen und 0 nicht aktualisiert.
6 nicht vollständig installiert oder entfernt.
Nach dieser Operation werden 25,9 MB Plattenplatz freigegeben.
Möchten Sie fortfahren? [J/n] 
dpkg: Warnung: Dateilisten-Datei des Paketes »python-apt-common« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-cryptography« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-requests-toolbelt« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3.5« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python-pip-whl« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-speechd« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pbr« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pycurl« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pil:amd64« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-cups« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-apt« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-dbus« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-rfc3339« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pyatspi« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-cffi-backend« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-keyring« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-brlapi« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-mock« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-crypto« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-zope.event« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-zope.component« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-idna« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-xdg« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-keyrings.alt« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-six« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-wheel« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-zope.interface« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pkg-resources« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-gi« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-debianbts« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3.5-minimal« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-reportlab« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-configargparse« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-zope.hookable« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-reportbug« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pyasn1« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-uno« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pexpect« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-chardet« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-minimal« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-httplib2« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pip« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-requests« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-pysimplesoap« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-cupshelpers« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python-libxml2« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-openssl« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-software-properties« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-urllib3« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-reportlab-accel:amd64« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-cairo« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-josepy« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-augeas« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-configobj« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-setuptools« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-secretstorage« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-ptyprocess« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-tz« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-debian« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-louis« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-acme« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-renderpm:amd64« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-parsedatetime« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
dpkg: Warnung: Dateilisten-Datei des Paketes »python3-certbot« fehlt; es wird angenommen,
 dass das Paket derzeit keine Dateien installiert hat
(Lese Datenbank ... 193565 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von exfalso (3.7.1-2) ...
  File "/usr/bin/pyclean", line 63  
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: Fehler beim Bearbeiten des Paketes exfalso (--remove):
 Unterprozess installiertes pre-removal-Skript gab den Fehlerwert 1 zurück
Traceback (most recent call last):
  File "/usr/bin/pycompile", line 35, in <module>  
    from debpython.version import SUPPORTED, debsorted, vrepr, \
  File "/usr/share/python/debpython/version.py", line 24, in <module>  
    from ConfigParser import SafeConfigParser
ImportError: No module named 'ConfigParser'  
dpkg: Fehler beim Aufräumen:
Unterprozess installiertes post-installation-Skript gab den Fehlerwert 1 zurück
Entfernen von gdebi (0.9.5.7+nmu1) ...
/var/lib/dpkg/info/gdebi.prerm: 6: /var/lib/dpkg/info/gdebi.prerm: py3clean: not found
dpkg: Fehler beim Bearbeiten des Paketes gdebi (--remove):
 Unterprozess installiertes pre-removal-Skript gab den Fehlerwert 127 zurück
Entfernen von gimp (2.8.18-1+deb9u1) ...
  File "/usr/bin/pyclean", line 63  
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: Fehler beim Bearbeiten des Paketes gimp (--remove):
 Unterprozess installiertes pre-removal-Skript gab den Fehlerwert 1 zurück
Entfernen von ndiff (7.40-1) ...
  File "/usr/bin/pyclean", line 63  
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: Fehler beim Bearbeiten des Paketes ndiff (--remove):
 Unterprozess installiertes pre-removal-Skript gab den Fehlerwert 1 zurück
Entfernen von yum (3.4.3-3) ...
  File "/usr/bin/pyclean", line 63  
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: Fehler beim Bearbeiten des Paketes yum (--remove):
 Unterprozess installiertes pre-removal-Skript gab den Fehlerwert 1 zurück
Fehler traten auf beim Bearbeiten von:
 exfalso
 gdebi
 gimp
 ndiff
 yum
E: Sub-process /usr/bin/dpkg returned an error code (1)

whereis python
python: /usr/bin/python2.7 /usr/bin/python /usr/bin/python3.5 /usr/bin/python3.5m /usr/lib/python2.7 /usr/lib/python3.5 /etc/python2.7 /etc/python /etc/python3.5 /usr/local/bin/python3.9 /usr/local/bin/python3.9-config /usr/local/bin/python /usr/local/lib/python2.7 /usr/local/lib/python3.9 /usr/local/lib/python3.5 /usr/include/python2.7 /usr/include/python3.5m /usr/share/python /usr/share/man/man1/python.1.gz

python --version
Python 3.5.3

Kann mir irgendjemand sagen, wie ich mein System bereinigt bekomme, ohne eine komplette OS Neuinstallation? Leider kann ich die Fehlermeldung nicht richtig deuten und stehe nun nach einem Monat probieren / googlen auf dem Schlauch.

Mit freundlichen Grüßen Hannes

Content-ID: 3846979072

Url: https://administrator.de/contentid/3846979072

Ausgedruckt am: 19.12.2024 um 15:12 Uhr

3803037559
3803037559 05.09.2022 aktualisiert um 15:42:07 Uhr
Goto Top
137960
137960 05.09.2022 um 17:04:24 Uhr
Goto Top
Ihhh! Manuell gelöschte Dateien bzw. Pakete, wo dann der Paketmanager aussteigt, mag ich auch nicht. face-wink

Es werden anscheinend sowohl Python3- als auch olle Python2-Abhängigkeiten vermisst.

Probier mal, python2 per Paketmanager zu installieren. Vielleicht behebt das schon mal den Syntaxfehler in pyclean.
Wenn das nichts bringt, versuche die Pakete zu deinstallieren, die die Probleme verursachen, also z.B. "yum" (wieso hast Du überhaupt yum auf dem System? Yum ist für RHEL/CentOS-ähnliche RPM-basierte Systeme).

Und als genereller Tip: Python nur als Basis installieren. Für (PyPI-)Pakete dann nicht apt oder yum benutzen, sondern virtuelle Umgebungen einrichten und nur damit arbeiten, also z.B.
python -m venv venv
source venv/bin/activate
pip install WAS_AUCH_IMMER
Anazhir
Anazhir 07.09.2022 um 11:13:50 Uhr
Goto Top
Vielen Dank ihr beiden für die Tipps,
ich werde es versuchen und noch einmal Feedback geben!
Anazhir
Lösung Anazhir 14.09.2022, aktualisiert am 07.04.2023 um 14:31:09 Uhr
Goto Top
Ich konnte das Problem lösen! Lösungsweg gefunden in diesem Artikel:
ubuntu broken python installation by mistake
Das ganze funktioniert auch unter meinem Betriebssystem Debian Stretch.
Wir müssen die Befehle aus diesem Artikel aber etwas anpassen, da bei mir python2.7 und nicht wie im Artikel python3.7 die unerfüllten Abhängigkeiten hatte.

Wir müssen die Pakete nun manuell herunterladen und manuell in die Verzeichnisse kopieren.

Dazu führen wir folgende Befehle aus:
cd /tmp
apt-get download libpython2.7-minimal
apt-get download python2.7-minimal
apt-get download python-minimal
apt-get download libpython2.7-stdlib
apt-get download python2.7
Wenn der Befehl kein Paket findet (wie bei mir), müssen die Dateien manuell mit dem Befehl "wget" von der Debian packages Seite heruntergeladen werden!
Sucht hier einfach nach den gleichnamigen Paketnamen von den Befehlen ein paar Zeilen weiter oben. Wenn ihr das Paket über den Link gefunden habt, müsst ihr ganz unten euere Architektur auswählen (in den meisten Fällen amd64) und dann den "security.debian.org/debian-security" kopieren und mit wget herunterladen.
Beispiel:
wget http://security.debian.org/debian-security/pool/updates/main/p/python2.7/libpython2.7-minimal_2.7.13-2+deb9u6_amd64.deb
Jetzt die bestehenden Installationen löschen:
rm -rf /usr/local/lib/python2.7*
rm -rf /usr/local/bin/python2.7*
update-alternatives --remove python /usr/local/bin/python2.7
update-alternatives --remove python3 /usr/local/bin/python2.7
hash -r  # removes cached python3/python binary path
Dateien entpacken:
cd /tmp
dpkg-deb -x libpython2.7-minimal_2.7.13-2+deb9u6_amd64.deb missing
dpkg-deb -x libpython2.7-stdlib_2.7.13-2+deb9u6_amd64.deb missing
dpkg-deb -x python2.7-minimal_2.7.13-2+deb9u6_amd64.deb missing
dpkg-deb -x python2.7_2.7.13-2+deb9u6_amd64.deb missing
dpkg-deb -x python-minimal_2.7.16-1_amd64.deb missing
Kopieren der Daten:
cd /tmp/missing
ls -lR /tmp/missing  # if you are curious about overwriting your HD
cp -rpfv /tmp/missing/*  / 
Prüfen ob die Python Dateien richtig kopiert wurden:
python
>>> import sys
>>> print(sys.version_info)
>>>
>>> quit()
Hier sollte jetzt die installierte Version zu sehen sein.
Jetzt noch Installationsdateien bereinigen
rm -rf /tmp/missing
Die Installationen sollten jetzt mit diesem Befehl repariert werden können:
apt-get install --fix-broken
dpkg -s -a python2.7 | grep  reinstreq
# Any listing also needs to be reinstalled along with python
apt-get install --reinstall python2.7
Nicht mehr benötigte Pakete entfernen:
apt-get autoclean
apt-get autoremove
Schauen ob apt wieder läuft:
apt update
Wenn es funktioniert seit ihr fertig!

PS @137960 wie kann ich python in eine virtuelle Umgebung migrieren?
Und danke noch einmal für die Antworten!
137960
137960 15.09.2022 um 12:31:16 Uhr
Goto Top
Glückwunsch, @Anazhir

Virtuelle Umgebung in Python bedeutet:

- Man arbeitet im eigenen "user space", d.h. unter einem normalen Useraccount. Die Daten werden innerhalb des Useraccounts gespeichert und man muss nicht "root" sein.
- Pakete werden nicht global auf dem System installiert, d.h. man verhunzt nicht das komplette System.
- Wenn was mit der Paketinstallation schief geht, löscht man die virtuelle Umgebung und erstellt eine neue. Die eigenen Quelltexte bleiben natürlich erhalten.
- Pakete mit ihren Versionen sind immer nur in der virtuellen Umgebung gültig und darin gekapselt.
- Man kann mehrere virtuelle Umgebungen parallel einrichten, um darin z.B. unterschiedliche Paketversionen zu testen oder sogar unterschiedliche Python-Binaries auszuführen.

Die Vorgehensweise ist immer gleich:

python3 -m venv venv

(Geht auch mit Python2)

Eventuell musst Du "virtual-env" oder ein ähnliches Systempaket per apt (oder yum unter RHEL-Systemen) installieren.

Der o.g. Befehl startet das interne Modul "venv" und erzeugt damit eine virtuelle Umgebung im Unterverzeichnis "venv". Will man ein anderes Verzeichnis, dann ändert man einfach den letzten Parameter.
Damit ist die Umgebung eingerichtet.

Um die virtuelle Umgebung zu aktivieren/zu nutzen, startet man das "activate"-Skript. Da das Skript z.B. auch den Prompt anpasst und Umgebungsvariablen setzt, muss man es "Sourced" aufrufen. Also entweder (unter Linux/macOS) mit einem Punkt vorneweg oder mit dem Schlüsselwort "source":

source venv/bin/activate

Und schon ist die Umgebung aktiv. Die Umgebung beinhaltet normalerweise sofort den "pip"-Befehl, d.h. Du kannst sofort mit "pip install requests" (als Beispiel) anfangen. Das Paket oder Modul wird dann unterhalb des "venv"-Verzeichnisses angelegt. Abhängigkeiten davon ebenfalls.

Gucksdu: https://docs.python.org/3/tutorial/venv.html

"Raus" kommst Du aus der Umgebung übrigens durch die Eingabe von "deactivate".
Den Prompt kann man auch anpassen siehe den Parameter "--prompt=".

Wichtig zu wissen:
mit "-m venv" legt Python auch eine Kopie der ausführbaren Python-Datei an. Je nach Version meist in 3 Ausführungen, z.B. "python", "python3" und "python3.10". Gleiches gilt für "pip".
Man kann (und muss/sollte) diese ausführbaren Versionen (die meist eh nur Links sind) dann benutzen, wenn man die virtuelle Umgebung in einem anderen Skript ausführen will. Ansonsten hätte man meist Probleme, das "activate"-Skript auch sourced auszuführen.
Deshalb weiss die in in "venv/bin/" abgelegte Python-Version, dass sie zu einer virtuellen Umgebung gehört und nutzt automatisch die zur Umgebung passenden Pakete.

Beispieldatei "test.py":
import numpy as np
import requests

arr = np.arange(20)
print(arr)

Zuerst ruft man das ohne virt. Umgebung auf und wird wahrscheinlich an einem der beiden Pakete (numpy oder requests) scheitern, weil es nicht (global) installiert ist. Jetzt werden die Pakete in der virt. Umgebung installiert:

python3 -m venv venv
source venv/bin/activate
pip install requests
pip install numpy
python3 test.py
pip freeze
deactivate

Der vorletzte Befehl zeigt die installierten Pakete und der letzte verlässt die virt. Umgebung. Ein Aufruf von "python3 test.py" führt wieder zum Fehler wegen fehlender Pakete.

Jetzt nutzen wir den direkten Zugriff ohne Aktivierung, z.B.:

venv/bin/python3.10 test.py

...und siehe da: es läuft wieder.

Damit bekommt man Skripts oder Server-Apps quasi in virtuellen Umgebungen zum Laufen.

(So gesehen braucht man die Aktivierung eigentlich nur für die Entwicklung).
Anazhir
Anazhir 15.09.2022 um 12:44:20 Uhr
Goto Top
Zitat von @137960:

Glückwunsch, @Anazhir

Virtuelle Umgebung in Python bedeutet:

- Man arbeitet im eigenen "user space", d.h. unter einem normalen Useraccount. Die Daten werden innerhalb des Useraccounts gespeichert und man muss nicht "root" sein.
- Pakete werden nicht global auf dem System installiert, d.h. man verhunzt nicht das komplette System.
- Wenn was mit der Paketinstallation schief geht, löscht man die virtuelle Umgebung und erstellt eine neue. Die eigenen Quelltexte bleiben natürlich erhalten.
- Pakete mit ihren Versionen sind immer nur in der virtuellen Umgebung gültig und darin gekapselt.
- Man kann mehrere virtuelle Umgebungen parallel einrichten, um darin z.B. unterschiedliche Paketversionen zu testen oder sogar unterschiedliche Python-Binaries auszuführen.

Die Vorgehensweise ist immer gleich:

python3 -m venv venv

(Geht auch mit Python2)

Eventuell musst Du "virtual-env" oder ein ähnliches Systempaket per apt (oder yum unter RHEL-Systemen) installieren.

Der o.g. Befehl startet das interne Modul "venv" und erzeugt damit eine virtuelle Umgebung im Unterverzeichnis "venv". Will man ein anderes Verzeichnis, dann ändert man einfach den letzten Parameter.
Damit ist die Umgebung eingerichtet.

Um die virtuelle Umgebung zu aktivieren/zu nutzen, startet man das "activate"-Skript. Da das Skript z.B. auch den Prompt anpasst und Umgebungsvariablen setzt, muss man es "Sourced" aufrufen. Also entweder (unter Linux/macOS) mit einem Punkt vorneweg oder mit dem Schlüsselwort "source":

source venv/bin/activate

Und schon ist die Umgebung aktiv. Die Umgebung beinhaltet normalerweise sofort den "pip"-Befehl, d.h. Du kannst sofort mit "pip install requests" (als Beispiel) anfangen. Das Paket oder Modul wird dann unterhalb des "venv"-Verzeichnisses angelegt. Abhängigkeiten davon ebenfalls.

Gucksdu: https://docs.python.org/3/tutorial/venv.html

"Raus" kommst Du aus der Umgebung übrigens durch die Eingabe von "deactivate".
Den Prompt kann man auch anpassen siehe den Parameter "--prompt=".

Wichtig zu wissen:
mit "-m venv" legt Python auch eine Kopie der ausführbaren Python-Datei an. Je nach Version meist in 3 Ausführungen, z.B. "python", "python3" und "python3.10". Gleiches gilt für "pip".
Man kann (und muss/sollte) diese ausführbaren Versionen (die meist eh nur Links sind) dann benutzen, wenn man die virtuelle Umgebung in einem anderen Skript ausführen will. Ansonsten hätte man meist Probleme, das "activate"-Skript auch sourced auszuführen.
Deshalb weiss die in in "venv/bin/" abgelegte Python-Version, dass sie zu einer virtuellen Umgebung gehört und nutzt automatisch die zur Umgebung passenden Pakete.

Beispieldatei "test.py":
import numpy as np
import requests

arr = np.arange(20)
print(arr)

Zuerst ruft man das ohne virt. Umgebung auf und wird wahrscheinlich an einem der beiden Pakete (numpy oder requests) scheitern, weil es nicht (global) installiert ist. Jetzt werden die Pakete in der virt. Umgebung installiert:

python3 -m venv venv
source venv/bin/activate
pip install requests
pip install numpy
python3 test.py
pip freeze
deactivate

Der vorletzte Befehl zeigt die installierten Pakete und der letzte verlässt die virt. Umgebung. Ein Aufruf von "python3 test.py" führt wieder zum Fehler wegen fehlender Pakete.

Jetzt nutzen wir den direkten Zugriff ohne Aktivierung, z.B.:

venv/bin/python3.10 test.py

...und siehe da: es läuft wieder.

Damit bekommt man Skripts oder Server-Apps quasi in virtuellen Umgebungen zum Laufen.

(So gesehen braucht man die Aktivierung eigentlich nur für die Entwicklung).

Danke für diese sehr ausführliche Antwort! Dann werde ich für die Zukunft Mal in Angriff nehmen. 😀