1 votes

pip ne détecte pas les paquets installés par l'utilisateur après la mise à niveau du système Python ?

J'utilise Python sur mon PC Fedora KDE (x64). J'avais auparavant Fedora 25, et j'avais installé Python 3.5 en utilisant sudo dnf install python3 et plusieurs paquets comme numpy y scipy en utilisant des commandes comme sudo dnf install python3-numpy . Maintenant, tous les paquets ou versions appropriés n'étaient pas disponibles dans les dépôts Fedora, donc j'ai installé ceux-là seulement dans ~/.local/lib/python3.5/site-packages/ via pip3 install <packagename> --user .

Avance rapide, et j'ai mis à jour Fedora à la version 28, pendant laquelle python3 avait été mis à jour à la version 3.6. Toutes les autres python3-* ont également été améliorés de manière appropriée. Maintenant pip3 ne reconnaît pas les paquets installés par l'utilisateur comme dans pip3 list --user et ne renvoie aucun résultat. Mais le ~/.local/lib/python3.5/site-packages/ existe toujours et contient un tas de paquets.

Maintenant, je ne sais pas ce que je dois faire. ....

  • Je peux peut-être supprimer le contenu de site-packages si je savais exactement ce qui peut être supprimé ? Je pourrais alors me remettre à chercher quels sont les paquets qui doivent vraiment être installés via pip maintenant.
  • Je peux peut-être renommer le ~/.local/lib/python3.5 à ~/.local/lib/python3.6 ?
  • Un autre moyen de faire en sorte que pip importe le contenu des anciens paquets Python installés par l'utilisateur ?

Je suis un peu perdue sur la façon de procéder.

1voto

hoefling Points 598

Cela devrait être assez facile à faire si vous avez encore Python 3.5 sous la main :

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

réinstallera tous les paquets du site utilisateur pour Python 3.6. Les choses deviennent un peu plus compliquées lorsque l'ancienne installation de Python a disparu (donc pas de pip3.5 dans votre cas), mais rien que vous ne puissiez gérer. Tout d'abord, vérifiez que le site de l'utilisateur existe toujours afin d'avoir quelque chose sur quoi travailler :

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

Maintenant, utilisez 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 de l'utilisateur sera transmis à la ligne de code Python qui analysera le répertoire à l'aide de la fonction pkg_resources.find_distributions (voir Obtenir ou créer des distributions dans les docs) qui est le même que celui que pip utilise sous le capot, IIRC. J'ai juste ajouté un peu de formatage pour que vous puissiez ensuite passer la sortie à la nouvelle fonction pip3.6 dans la dernière itération de l'extension du one-liner. La phrase complète est :

$ 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 de la setuptools et devrait être déjà préinstallé (du moins, c'est le cas lorsque l'on utilise les installateurs de la section https://www.Python.org/downloads/ ). Sinon, installez setuptools d'abord :

$ 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