Si bien hay varias formas de instalar aplicaciones en Ubuntu, prefiero usar el comando apt en la terminal para instalar software.
Si hace lo mismo, puede encontrar un error de dependencia como este:
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
green-recorder : Depends: python-urllib3 but it is not installable
E: Unable to correct problems, you have held broken packages.
Por lo general, en It’s FOSS, encontrará soluciones simples y fáciles de seguir para problemas complicados. Desafortunadamente, este no es tan sencillo.
En este artículo de solución de problemas, le diré por qué ocurre este error y le daré algunos consejos sobre cómo resolver este problema.
¿Por qué ves el error “has retenido paquetes rotos”?
Estaba intentando instalar un paquete de aplicación, probablemente desde un PPA o un repositorio de terceros.
Las aplicaciones a menudo necesitan versiones específicas de bibliotecas y componentes de software (llamadas dependencias). Es posible que estas dependencias no formen parte del paquete de la aplicación en sí, pero se espera que ya estén instaladas en su sistema o durante la instalación de la aplicación.
Su sistema Linux intenta instalar estas dependencias por sí solo. Pero si la versión del paquete de dependencia no está disponible en su sistema, se confunde ya que no tiene forma de resolver este problema de dependencia.
Es por eso que le informa que el software que intentaba instalar depende de XYZ pero este XYZ no se puede instalar.
Otro caso de uso es cuando su paquete se puede retener es cuando intenta instalar dos versiones del mismo software. Supongamos que está instalando una versión específica de Wine cuando ya tiene otra instalada.
Cómo solucionar el error “No se pueden corregir los problemas, ha retenido paquetes rotos”
Puedes probar algunas cosas para que funcionen. Necesita tener algunas ideas sobre la instalación / eliminación de paquetes en la línea de comandos de Linux para resolver las cosas aquí.
Asegúrese de que la caché de paquetes de su sistema esté actualizada
Primero, asegúrese de que la caché de paquetes local esté actualizada. Su sistema verifica esta caché para los paquetes disponibles. Es posible (pero no seguro) que el sistema vea el paquete de dependencia después de la actualización de la caché.
sudo apt update
Intente instalar el paquete problemático nuevamente y vea si soluciona el problema.
Instalar la dependencia
Si intenta instalar el paquete problemático nuevamente y aún se queja del mismo error de dependencia, entonces quizás esa dependencia no esté disponible para la versión de distribución.
Puede usar el comando de búsqueda apt para ver si puede esta biblioteca de algún otro paquete o nombre:
sudo apt search package_name
Si el paquete está disponible, ¿es la misma versión que solicitó el paquete que intentaba instalar?
Intente instalar el paquete de dependencia y vea qué sucede:
sudo apt install dependency_package
Puede encontrar una cadena de dependencia. Intenta instalar la dependencia A pero se queja de B. Luego intenta instalar B y se queja de C.
También puede suceder que cuando intente instalar el paquete C, ya esté instalado. Verifique la versión del paquete C. ¿Es la misma versión que requiere el paquete B? En caso afirmativo, eliminar C e instalarlo de nuevo podría ayudar.
¿Puede obtener el paquete de dependencia que falta de alguna otra fuente?
Si el paquete de dependencia que falta no se puede encontrar en su sistema (no hay resultados en la búsqueda de apt), puede intentar obtener el paquete de dependencia de otro lugar. Sé que no es muy conveniente, pero no tienes muchas opciones aquí.
Para example, en el caso de instalar shutter, se quejó de libgoo-canvas-perl y esta biblioteca ya no está disponible en el sistema Ubuntu.
sudo apt install shutter
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
shutter : Depends: libgoo-canvas-perl but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Sin embargo, dado que estaba disponible en las versiones anteriores de Ubuntu, busqué este paquete en el archivo de paquetes de Ubuntu y lo encontré en la lista de Ubuntu 14.04. aquí. Descargué el archivo .DEB y lo instalé.
Ahora que este paquete de dependencia está instalado, intentar instalar la aplicación original (shutter en este caso) ya no debería quejarse de al menos este paquete.
Si no puede encontrar el paquete de dependencia en ninguna parte, instale el paquete problemático desde otra fuente
Entonces en el example arriba, intenté instalar la aplicación Green Recorder usando su PPA. Esta aplicación necesita python-urllib3
biblioteca, pero desafortunadamente, esta biblioteca no está disponible en mi sistema Ubuntu 20.04.
[email protected]:~$ apt search python-urllib3
Sorting... Done
Full Text Search... Done
Claramente, esta es una aplicación mal empaquetada. El desarrollador lo puso a disposición para Ubuntu 20.04 sin darse cuenta de que Ubuntu 20.04 ya no es compatible con Python 2 y todas las bibliotecas de Python ahora comienzan con el prefijo python3. Entonces, python-urllib3 debería ser python3-urllib3.
Si se encuentra en tal situación, tal vez consulte la página de inicio del proyecto o busque en Internet una fuente alternativa para instalarlo. ¿Quizás hay una versión Snap / Flatpak o algún usuario creó un PPA para ello? Si nada más, también puede optar por la opción de código fuente.
Si ve el error de paquete roto retenido durante la actualización, intente esto
La mayor parte de la discusión hasta ahora asumió que ve este error al instalar una nueva aplicación. Puede que no siempre sea así.
Si ve este error cuando intenta actualizar su sistema con sudo apt update, entonces tendrás que adoptar un enfoque ligeramente diferente.
Primero, verifique qué paquete se está reteniendo con este comando:
dpkg --get-selections | grep hold
Si ve algunos paquetes retenidos, elimínelos y luego continúe actualizando su sistema o instalando el software.
También puede utilizar el administrador de paquetes Synaptic para reparar los paquetes rotos.
¿Conseguiste solucionar el problema?
Como mencioné anteriormente, no existe una solución sencilla para este problema. Tendrás que investigar por tu cuenta y ver si se puede arreglar o no.
Comparta los comentarios si su problema se soluciona. Si no es así, puedo intentar ayudarte.