pip erkennt keine vom Benutzer installierten Pakete nach dem Upgrade von System Python?


1

Ich verwende Python auf meinem Fedora KDE (x64) -PC. Ich hatte Fedora 25 und Python 3.5 mit sudo dnf install python3und mehreren Paketen wie numpyund scipymit Befehlen wie installiert sudo dnf install python3-numpy. Jetzt waren nicht alle passenden Pakete oder Versionen auf Fedora-Repositories verfügbar, also nur die, in denen ich ~/.local/lib/python3.5/site-packages/via installiert habe pip3 install <packagename> --user.

Schneller Vorlauf, und ich habe Fedora auf Version 28 aktualisiert, währenddessen python3wurde auf Version 3.6 aktualisiert. Alle anderen python3-*Pakete wurden ebenfalls entsprechend aktualisiert. Jetzt erkennt pip3 keine vom Benutzer installierten Pakete wie in pip3 list --userund gibt überhaupt keine Ausgabe zurück. Das ~/.local/lib/python3.5/site-packages/Verzeichnis ist jedoch noch vorhanden und enthält eine Reihe von Paketen.

Jetzt bin ich mir nicht sicher was ich tun soll ....

  • Ich kann vielleicht den Inhalt von löschen site-packages, wenn ich genau wüsste, was gelöscht werden kann? Dann kann ich überarbeiten, welche Pakete jetzt wirklich über pip installiert werden müssen.
  • Ich kann das vielleicht umbenennen ~/.local/lib/python3.5zu ~/.local/lib/python3.6?
  • Wie kann pip den Inhalt der alten, vom Benutzer installierten Python-Pakete importieren?

Ich bin irgendwie verloren, wie ich vorgehen soll.

Antworten:


0

Das sollte ziemlich einfach sein, wenn Sie immer noch Python 3.5 in der Nähe haben:

$ pip3.5 list --user --format=freeze | xargs pip3.6 install --user

installiert alle Benutzer-Site-Pakete für Python 3.6 neu. Die Dinge werden etwas komplizierter, wenn die alte Python-Installation weg ist (also nein pip3.5in Ihrem Fall), aber nichts, was Sie nicht verwalten können. Überprüfen Sie zunächst, ob die Benutzersite noch vorhanden ist, damit Sie mit etwas arbeiten können:

$ find ~/.local -type d -name "site-packages" | grep python3.5
/Users/hoefling/.local/lib/python3.5/site-packages

Verwenden Sie nun, pkg_resourcesum die auf dieser Benutzersite verfügbaren Distributionen aufzulisten:

$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'{pkg.project_name}=={pkg.version}' for pkg in pkg_resources.find_distributions(sys.argv[1]))))"
wheel==0.30.0

Das Verzeichnis der Benutzersite wird an die Python-Codezeile weitergeleitet, die das Verzeichnis mithilfe der pkg_resources.find_distributionsFunktion (siehe Abschnitt " Abrufen oder Erstellen von Distributionen " in den Dokumenten) pipdurchsucht. Diese Funktion wird auch unter der Haube IIRC verwendet. Ich habe nur einige Formatierungen hinzugefügt, damit Sie die Ausgabe pip3.6in der letzten Iteration der Erweiterung des Einzeilers an die neue übergeben können . Der volle Einzeiler ist:

$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'{pkg.project_name}=={pkg.version}' for pkg in pkg_resources.find_distributions(sys.argv[1]))))" | xargs pip3.6 install --user

pkg_resourcesist Teil des setuptoolsPakets und sollte bereits vorinstalliert sein (zumindest bei Verwendung der Installationsprogramme von https://www.python.org/downloads/ ). Wenn nicht, installieren Sie setuptoolszuerst:

$ dnf install python3-setuptools
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.