¿Cómo forzar que un paquete use una versión de Python en Gentoo?

¿Cómo forzar que un paquete use una versión de Python en Gentoo?

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 USEindicador para paquetes que usan Python en python3_8 -python3_7 -python3_6.
  • Reconstruya esos paquetes para emerge --update --newusepermitirles 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.usey 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.6si /etc/portage/package.useespecifica que debería usarlo 3.8? ¿Y por qué la USEvariable no contiene ninguna especificación de Python? ¿Existe otro archivo de configuración que tenga mayor prioridad /etc/portage/package.usey redefina la USEvariable? 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 --treela 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):

  1. En /etc/portage/make.conf, agregue o actualice PYTHON_TARGETSy PYTHON_SINGLE_TARGETa la versión de Python que quiero usar (por ejemplo, PYTHON_TARGETS="python3_9 python3_8"y PYTHON_SINGLE_TARGET="python3_9"). Tenga en cuenta que la wiki de Gentoo recomienda hacer esto en package.use: cualquiera debería funcionar ya que se trata de un cambio global.

  2. Ejecute emerge -puvDN --with-bdeps=y @worldpara verificar que ningún paquete esté descontento con los cambios.

  3. Agregue o actualice las USEbanderas de Python para paquetes individuales.

Recomiendo encarecidamente no utilizar emerge -Ca 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 emergeno funcione en absoluto.

información relacionada