1 votes

Pip ne détecte pas les packages installés par l'utilisateur après la mise à niveau du python du système?

J'utilise Python sur mon PC Fedora KDE (x64). J'avais Fedora 25, et j'avais installé Python 3.5 en utilisant sudo dnf install python3 et plusieurs packages comme numpy et scipy en utilisant des commandes comme sudo dnf install python3-numpy. Maintenant, toutes les packages appropriées ou versions n'étaient pas disponibles dans les dépôts de fedora, donc celles-ci je les ai installées dans ~/.local/lib/python3.5/site-packages/ via pip3 install --user.

En avant rapide, j'ai mis à jour Fedora vers la version 28, au cours de laquelle python3 a été mis à jour vers la version 3.6. Toutes les autres packages python3-* ont également été mises à jour de manière appropriée. Maintenant, pip3 ne reconnaît pas les packages installés par l'utilisateur comme dans pip3 list --user, ne renvoyant aucun résultat du tout. Mais le répertoire ~/.local/lib/python3.5/site-packages/ existe toujours et contient plusieurs packages.

Maintenant je ne suis pas sûr de ce que je devrais faire....

  • Je pourrais peut-être supprimer le contenu de site-packages, si je savais exactement ce qui peut être supprimé ? Ensuite, je pourrais commencer à réexaminer quels packages doivent vraiment être installés via pip maintenant.
  • Je pourrais peut-être renommer le ~/.local/lib/python3.5 en ~/.local/lib/python3.6 ?
  • Une autre façon de faire en sorte que pip importe le contenu des anciens packages Python installés par l'utilisateur ?

Je suis un peu perdu sur la manière de procéder.

1voto

hoefling Points 598

Il devrait être assez facile de le faire si vous avez encore Python 3.5 :

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

réinstallera tous les packages du site utilisateur pour Python 3.6. Les choses se compliquent un peu lorsque l'ancienne installation de Python n'est plus présente (donc pas de pip3.5 dans votre cas), mais ce n'est rien que vous ne puissiez gérer. Tout d'abord, vérifiez que le site utilisateur existe toujours pour que vous ayez quelque chose avec lequel travailler :

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

Utilisez maintenant pkg_resources pour lister les distributions disponibles dans ce site utilisateur :

$ 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

Le répertoire du site utilisateur sera passé à la ligne de code Python qui analysera le répertoire en utilisant la fonction pkg_resources.find_distributions (voir la section Obtenir ou Créer des Distributions dans la documentation) qui est la même que celle que pip utilise sous le capot, si je me souviens bien. J'ai ajouté un peu de formatage pour que vous puissiez ensuite passer la sortie au nouveau pip3.6

$ 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_resources fait partie du package setuptools et devrait déjà être préinstallé (au moins c'est le cas lors de l'utilisation des installateurs depuis https://www.python.org/downloads/). Sinon, installez d'abord setuptools :

$ dnf install python3-setuptools

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X