
Ich möchte für alle meine Pakete in einem Gentoo-System nur eine Python3-Version verwenden. Daher habe ich nach den installierten Versionen gesucht und festgestellt, dass drei Versionen installiert sind: 3.6, 3.7 und 3.8. Ich möchte alle Pakete auf 3.8 konvertieren und die vorherigen Versionen löschen.
Mein Plan:
- Python 3.6 und 3.7 aufheben.
- Setzen Sie das
USE
Flag für Pakete, die Python verwenden, umpython3_8 -python3_7 -python3_6
. - Erstellen Sie diese Pakete neu, damit
emerge --update --newuse
sie Python 3.8 verwenden können.
Also nach dem Entfernen von Python 3.6 mit:
emerge --ask -C dev-lang/python:3.6
Ich habe die Zeile hinzugefügt
virtual/python-ipaddress python3_8 -python3_7 -python3_6
zu /etc/portage/package.use
und laufen
emerge --ask --update --newuse --deep virtual/python-ipaddress
und ich bekomme
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild NS ] dev-lang/python-3.6.11-r2 [2.7.18-r1, 3.7.8-r2, 3.8.4-r1] USE="(threads%*)"
Would you like to merge these packages? [Yes/No]
Ich verstehe dieses Verhalten nicht: Warum will emerge installieren, python-3.6
wenn /etc/portage/package.use
angegeben wird, dass es verwenden soll 3.8
? Und warum USE
enthält die Variable keine Python-Spezifikation? Gibt es eine andere Konfigurationsdatei, die eine höhere Priorität hat als /etc/portage/package.use
und die USE
Variable neu definiert? Soweit ich es verstehe,die Dokumentation, das sollte nicht passieren.
Antwort1
Übrigens ist Python kein normales Paket in Gentoo. (hauptsächlich, weilTragenselbst hängt von Python ab.) => Es ist wichtig, auch andere Variablen festzulegen. Und sie müssen kohärent sein. Die Idee hinter USE-Flags ist, dass sie für die Festlegung von Benutzereinstellungen reserviert sind. Einstellungen, die im schlimmsten Fall ein Paket funktionsunfähig machen können, aber auf keinen Fall das gesamte System beschädigen.
Die Python-Version ist definitivNICHTeine Benutzerpräferenz. NEIN! Der Benutzer kann nicht einfach aufwachen und entscheiden: Ich möchte nur Phython XYZ! Nun... ja... der Benutzer kann... Auf seine eigenen Kosten.
Um Ihr Ziel zu erreichen (so wie ich es verstehe), wäre ich definitiv nicht so vorgegangen (sehr riskant*) Weg, dem Sie gefolgt sind.
Ich hätte lieber das beschriebene Verfahren befolgthier unter dem AbsatzVersions-Upgrade.
Übrigens: Achten Sie auch auf dieauswählenDing.
Um es ganz klar zu sagen und nur aus Interesse ... letzten Endes ... warum zum Teufel sollten Sie das wollen?
Tux ~ $ equery size python-2.7.18-r1
dev-lang/python-2.7.18-r1
Total files : 4177
Total size : 63.28 MiB
Tux ~ $ equery size python-3.7.8-r2
dev-lang/python-3.7.8-r2
Total files : 6616
Total size : 98.74 MiB
Sie möchten insgesamt weniger als 200 MB wiederherstellen und dabei möglicherweise verschiedene interessante Dinge zerstören?
Passen Sie auf! : Sie werden nie wirklichKonvertieren, portieren Sie ein Programm von einer Sprachversion in eine andere, indem Sie die Verwendungsflags manipulieren. Sie verknüpfen es einfach mit einigen unterschiedlichen Bibliotheken, die, wenn das Programm nicht kompatibel gemacht wurde, einfach alles kaputt machen.
Sehr riskant (*): Ich würde nie versuchen, ein Paket aufzuheben, bevor ich überprüft habe, dass kein installiertes Paket streng davon abhängt. Ich meine beispielsweise Programme, die nicht von Python 2 auf Python 3 portiert wurden. (Ich persönlich habe einige davon, die definitiv die Existenz von Python-2.7.18-r1 auf meinen Systemen rechtfertigen.)
Das soll nicht heißen, dass Sie, wenn Sie 3.6 und 3.7 erfolgreich entfernt haben, mit ziemlicher Sicherheit nicht weniger als glib (2.62.6), wireshark, git usw. kaputt gemacht haben, deren neueste stabile Versionen, soweit ich sehen kann, noch nicht 3.8-kompatibel sind …
Ganz zu schweigen davon, dass Sie möglicherweise sogar Portage selbst beschädigt haben, sodass keine Möglichkeit besteht, dies wiederherzustellen, abgesehen von Backups, die Sie ... mit ziemlicher Sicherheit ... nicht erstellt haben ...
Antwort2
Wie bereits in früheren Antworten erwähnt, ist es nicht sicher, ein Paket zu entfernen und dann zu versuchen, die Konfiguration so zu ändern, dass es nicht mehr benötigt wird. Der sichere Ansatz ist der umgekehrte Weg: Ändern Sie Ihre Konfiguration (Anpassen der USE-Flags, (De-)Maskieren von Versionen), sodass das System selbst erkennt, dass das Paket nicht benötigt wird (dazu ist möglicherweise die Neuinstallation einiger Pakete erforderlich) und das System es selbst über entfernt emerge --depclean
.
Was die ursprüngliche Frage betrifft, bei der Python zwangsweise entfernt wurde, geben Sie einfach --tree
die Option für den Befehl „emerge update“ ein. Es werden dann nicht nur die zu installierenden Pakete aufgelistet, sondern auch, was sie in den Baum gebracht hat.
Höchstwahrscheinlich gibt es ein Paket, das weiterhin von abhängig ist python:3.6
.
Antwort3
Wenn ich Python aktualisiere, sind hier die Schritte, die ich ausführe (teilweise basierend aufdas Gentoo-Wiki):
Fügen Sie in und die Python-Version hinzu, die ich verwenden möchte,
/etc/portage/make.conf
oder aktualisieren Sie diese (z. B. und ). Beachten Sie, dass das Gentoo-Wiki empfiehlt, dies in zu tun : Beides sollte funktionieren, da dies eine globale Änderung ist.PYTHON_TARGETS
PYTHON_SINGLE_TARGET
PYTHON_TARGETS="python3_9 python3_8"
PYTHON_SINGLE_TARGET="python3_9"
package.use
Führen Sie den Vorgang aus
emerge -puvDN --with-bdeps=y @world
, um zu überprüfen, dass kein Paket mit den Änderungen unzufrieden ist.USE
Fügen Sie die Python- Flags für einzelne Pakete hinzu oder aktualisieren Sie sie .
Ich rate dringend von der Verwendung von ab, emerge -C
es sei denn, Sie sindabsolutStellen Sie sicher, dass keine Pakete dieses Paket verwenden! Insbesondere bei Python können Sie es so einrichten, dass es emerge
überhaupt nicht funktioniert.