pip erkennt vom Benutzer installierte Pakete nach dem Upgrade von Systempython nicht?

507
Milind R

Ich benutze Python auf meinem Fedora KDE (x64) PC. Ich hatte früher Fedora 25 und hatte Python 3.5 mit sudo dnf install python3verschiedenen Paketen wie numpyund scipyKommandos wie installiert sudo dnf install python3-numpy. Nun waren nicht alle geeigneten Pakete oder Versionen für Fedora-Repositorys verfügbar, also die, die ich allein in ~/.local/lib/python3.5/site-packages/via installierte pip3 install <packagename> --user.

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

Nun bin ich mir nicht sicher, was ich tun soll ....

  • Kann ich vielleicht den inhalt löschen site-packages, wenn ich genau wüsste, was gelöscht werden kann? Dann kann ich noch einmal untersuchen, welche Pakete nun wirklich über pip installiert werden müssen.
  • Ich kann das vielleicht umbenennen ~/.local/lib/python3.5zu ~/.local/lib/python3.6?
  • Eine andere Möglichkeit, den Inhalt der alten, vom Benutzer installierten Python-Pakete durch pip importieren zu lassen?

Ich bin irgendwie verloren, wie ich vorgehen soll.

1

1 Antwort auf die Frage

0
hoefling

Das sollte ziemlich einfach sein, wenn Sie noch Python 3.5 haben:

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

installiert alle User-Site-Pakete für Python 3.6 neu. Die Dinge werden etwas komplizierter, wenn die alte Python-Installation weg ist ( pip3.5in Ihrem Fall also nicht ), aber immer noch nichts, was Sie nicht schaffen können. Überprüfen Sie zunächst, ob die Benutzerseite 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 

Jetzt können Sie pkg_resourcesdie Distributionen auf dieser Benutzerseite auflisten:

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

Das Benutzer-Site-Verzeichnis wird an die Python-Codezeile weitergeleitet, die das Verzeichnis mit der pkg_resources.find_distributionsFunktion scannt (siehe Abschnitt Abrufen oder Erstellen von Distributionen in den Dokumenten) pip. Dies ist die gleiche, die unter der Haube IIRC verwendet wird. Ich habe nur etwas Formatierung hinzugefügt, so dass Sie die Ausgabe pip3.6in der letzten Iteration der Erweiterung des Einliners an die neue übergeben können . Der volle Einliner ist:

$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'==' 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 (dies ist zumindest der Fall, wenn Sie die Installationsprogramme von https://www.python.org/downloads/ verwenden ). Wenn nicht, setuptoolszuerst installieren :

$ dnf install python3-setuptools