
Me gustaría usar sólo una versión de Python3 para todos mis paquetes en un sistema Gentoo. Entonces busqué las versiones instaladas y descubrí que hay tres versiones instaladas: 3.6, 3.7 y 3.8. Me gustaría convertir todos los paquetes a 3.8 y eliminar las versiones anteriores.
Mi plan:
- Separe Python 3.6 y 3.7.
- Establezca el
USE
indicador para paquetes que usan Python enpython3_8 -python3_7 -python3_6
. - Reconstruya esos paquetes para
emerge --update --newuse
permitirles usar Python 3.8.
Entonces, después de eliminar Python 3.6 con:
emerge --ask -C dev-lang/python:3.6
Agregué la línea
virtual/python-ipaddress python3_8 -python3_7 -python3_6
/etc/portage/package.use
y correr
emerge --ask --update --newuse --deep virtual/python-ipaddress
y lo entiendo
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild NS ] dev-lang/python-3.6.11-r2 [2.7.18-r1, 3.7.8-r2, 3.8.4-r1] USE="(threads%*)"
Would you like to merge these packages? [Yes/No]
No entiendo este comportamiento: ¿por qué emerge quiere instalar python-3.6
si /etc/portage/package.use
especifica que debería usarlo 3.8
? ¿Y por qué la USE
variable no contiene ninguna especificación de Python? ¿Existe otro archivo de configuración que tenga mayor prioridad /etc/portage/package.use
y redefina la USE
variable? Por lo que entiendo leyendola documentación, esto no debería suceder.
Respuesta1
Por cierto, Python no es un paquete común y corriente en Gentoo. (mayormente porqueporteodepende de Python.) => También es importante configurar otras variables. Y hay que ser coherente. La idea detrás de las banderas USE es que están reservadas para configurar las preferencias del usuario. Preferencias que, en el peor de los casos, pueden hacer que un paquete no funcione pero en ningún caso romper todo el sistema.
La versión de Python es definitivamenteNOuna preferencia del usuario. ¡NO! El usuario simplemente no puede despertarse y decidir: ¡solo quiero Phython XYZ! Bueno... sí... el usuario puede... Por su cuenta.
Para lograr su objetivo (según tengo entendido), definitivamente no habría procedido (altamente riesgoso*) camino que seguiste.
Preferiría haber seguido el procedimiento detallado.aquí debajo del párrafoActualización de versión.
Por cierto: también ten cuidado con elseleccionarcosita.
Por no decirlo y por interés... al final del día... ¿por qué diablos querrías eso?
Tux ~ $ equery size python-2.7.18-r1
dev-lang/python-2.7.18-r1
Total files : 4177
Total size : 63.28 MiB
Tux ~ $ equery size python-3.7.8-r2
dev-lang/python-3.7.8-r2
Total files : 6616
Total size : 98.74 MiB
¿Recuperar menos de 200 MB en total con el gasto potencial de romper varias cosas interesantes?
¡Prestar atención! : En realidad nunca lo harásconvertir, transfiera un programa de una versión de idioma a otra manipulando las banderas de uso. Simplemente lo vinculará a algunas bibliotecas diferentes que, si el programa no se ha hecho compatible, simplemente arruinarán todo.
Altamente arriesgado (*): nunca intentaría separar cualquier paquete antes de verificar el hecho de que ningún paquete instalado depende estrictamente de él. Me refiero a programas que no han sido portados de Python 2 a Python 3, por ejemplo. (Personalmente recibo un par de ellos que definitivamente justifican la existencia de python-2.7.18-r1 en mis sistemas)
No quiere decir que si eliminó con éxito 3.6 y 3.7, es casi seguro que rompió nada menos que el simplista (2.62.6), wireshark, git... cuyas últimas versiones estables, hasta donde puedo ver, todavía no Compatible con 3.8...
Por no decir que incluso podrías haber roto el portage, prohibiendo cualquier posibilidad de recuperarte de esto, aparte de gracias a las copias de seguridad que... casi con seguridad... evitaste crear...
Respuesta2
Como ya se señaló en respuestas anteriores, no es seguro eliminar el paquete y luego intentar cambiar la configuración para que sea innecesario. El enfoque seguro es al revés: cambie su configuración (ajustando indicadores USE, (des)enmascarando versiones) para que el sistema reconozca que el paquete no es necesario (es posible que sea necesario reinstalar algunos paquetes) y el sistema lo eliminará por sí mismo a través de emerge --depclean
.
En cuanto a la pregunta original, donde se eliminó Python por la fuerza, simplemente coloque --tree
la opción para que surja el comando de actualización. Luego enumerará no sólo los paquetes que se instalarán sino también lo que los trajo al árbol.
Lo más probable es que haya un paquete que todavía dependa de python:3.6
.
Respuesta3
Cuando actualizo Python, estos son los pasos que sigo (basados parcialmente enel wiki de Gentoo):
En
/etc/portage/make.conf
, agregue o actualicePYTHON_TARGETS
yPYTHON_SINGLE_TARGET
a la versión de Python que quiero usar (por ejemplo,PYTHON_TARGETS="python3_9 python3_8"
yPYTHON_SINGLE_TARGET="python3_9"
). Tenga en cuenta que la wiki de Gentoo recomienda hacer esto enpackage.use
: cualquiera debería funcionar ya que se trata de un cambio global.Ejecute
emerge -puvDN --with-bdeps=y @world
para verificar que ningún paquete esté descontento con los cambios.Agregue o actualice las
USE
banderas de Python para paquetes individuales.
Recomiendo encarecidamente no utilizar emerge -C
a menos que estéabsolutamente¡Asegúrese de que ningún paquete esté usando ese paquete! Especialmente en el caso de Python, podrías hacer que emerge
no funcione en absoluto.