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:
Ausgabe von apt --fix-broken install:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3846979072
Url: https://administrator.de/contentid/3846979072
Ausgedruckt am: 17.11.2024 um 07:11 Uhr
6 Kommentare
Neuester Kommentar
Ihhh! Manuell gelöschte Dateien bzw. Pakete, wo dann der Paketmanager aussteigt, mag ich auch nicht.
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
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
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:
(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":
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":
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:
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.:
...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).
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).