pip no detecta paquetes instalados por el usuario después de actualizar el sistema python?


1

Yo uso Python en mi PC Fedora KDE (x64). Solía ​​tener Fedora 25, y había instalado Python 3.5 usando sudo dnf install python3y varios paquetes como numpyy scipyusando comandos como sudo dnf install python3-numpy. Ahora no todos los paquetes o versiones adecuadas estaban disponibles en los repositorios de fedora, así que solo los instalé a ~/.local/lib/python3.5/site-packages/través de pip3 install <packagename> --user.

Avance rápido, y actualicé Fedora a la versión 28, durante la cual python3se actualizó a la versión 3.6. Todos los demás python3-*paquetes también se han actualizado adecuadamente. Ahora pip3 no reconoce ningún paquete instalado por el usuario como en pip3 list --user, sin devolver ningún resultado. Pero el ~/.local/lib/python3.5/site-packages/directorio todavía existe y tiene un montón de paquetes.

Ahora no estoy seguro de qué debo hacer ...

  • Tal vez pueda eliminar el contenido de site-packages, si supiera exactamente qué se puede eliminar. Entonces puedo comenzar a volver a investigar qué paquetes realmente necesitan instalarse a través de pip ahora.
  • ¿Tal vez pueda cambiar el nombre de ~/.local/lib/python3.5a ~/.local/lib/python3.6?
  • ¿Alguna otra forma de hacer que pip importe el contenido de los viejos paquetes python instalados por el usuario?

Estoy un poco perdido en cómo proceder.

Respuestas:


0

Eso debería ser algo bastante fácil de hacer si todavía tienes Python 3.5 alrededor:

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

reinstalará todos los paquetes del sitio del usuario para Python 3.6. Las cosas se vuelven un poco más complicadas cuando la antigua instalación de Python desaparece (por lo que no pip3.5en su caso), pero todavía no hay nada que no pueda administrar. En primer lugar, verifique que el sitio del usuario aún exista para que tenga algo con lo que trabajar:

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

Ahora use pkg_resourcespara enumerar las distribuciones disponibles en ese sitio de usuario:

$ 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

El directorio del sitio del usuario se canalizará a la línea de código de Python que escaneará el directorio utilizando la pkg_resources.find_distributionsfunción (consulte la sección Obtención o creación de distribuciones en los documentos), que es el mismo que se piputiliza debajo del capó, IIRC. Acabo de agregar algo de formato para que luego pueda pasar el resultado al nuevo pip3.6en la última iteración de extender el one-liner. La línea completa es:

$ 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_resourceses parte del setuptoolspaquete y ya debe estar preinstalado (al menos este es el caso cuando se usan los instaladores de https://www.python.org/downloads/ ). Si no, instale setuptoolsprimero:

$ dnf install python3-setuptools
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.