Problemas com dependências do apt após a instalação do python 3.5

5

Eu baixei e compilei o último python, 3.5, e o instalei com o checkinstall. Agora estou recebendo uma tonelada de pacotes que possuem dependências ausentes no apt.

apt-xapian-index : Depends: python (< 2.8) but 3.5.0-1 is to be 

installed
 duplicity : Depends: python (< 2.8) but 3.5.0-1 is to be installed
 gconf2 : Depends: python:any
 .
 .
 .
 totem-plugins : Depends: python:any (>= 2.6.6-7~)
 ubuntu-system-service : Depends: python (< 2.8) but 3.5.0-1 is to be installed
                         Depends: python:any (>= 2.7.1-0ubuntu2)
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Mas ainda tenho o python instalado, incluindo o 2.7.9.

$ which python
/usr/bin/python
$ python
Python 2.7.9 (default, Apr  2 2015, 15:33:21) 
[GCC 4.9.2] on linux2

$ which python3
/usr/local/bin/python3
$ python3
Python 3.5.0 (default, Sep 13 2015, 19:47:21) 
[GCC 4.9.2] on linux

Como eu removo o pacote que instalei ou corrijo as dependências sem ver que o python3 está instalado?

Além disso, o python3.4 ainda está em /usr/bin/python3

EDITAR: vejo que ele quer que eu faça apt-get -f install , mas está removendo muitas coisas e realmente não acho que seja a maneira correta de corrigir isso.

    
por electrometro 14.09.2015 / 04:10

2 respostas

5

Ainda bem que consegui consertar. Eu estava preocupado que teria que reinstalar o Ubuntu.

Eu fui editando manualmente /var/lib/dpkg/status e removi a entrada que foi feita pelo checkinstall .

Uma vez que foi removido, fui para /usr/local/bin e removi todas as coisas do python 3.5. Eu também me certifiquei de que o python3-4 ainda estivesse em /usr/bin/ . Então eu fiz um sudo dpkg-reconfigure -a e finalmente um apt-get -f install e havia apenas 1 coisa que estava 'faltando' que era python.

Então eu consegui instalá-lo da maneira correta seguindo as instruções do README e removendo o link simbólico para python3.4 e criando um novo para o python3.5.

    
por electrometro 14.09.2015 / 05:08
3

Eu tive o mesmo problema depois de instalar python3.4 com checkinstall (em vez de python3.5 para electrometro )

Motivo pelo qual esse problema ocorre

Eu descobri por que esse problema ocorreu em primeiro lugar.

Ao criar o arquivo .deb a partir da origem do Python 3.4 com checkinstall que o instala, o nome padrão do pacote configurado por checkinstall é " python ".

Como conseqüência, checkinstall desinstala o pacote chamado python antes de instalar o novo usando dpkg !! Este pacote já existe no Ubuntu. Está basicamente ligado ao python2! Por alguma razão, espero, eu acho que dpkg tenta remover a versão do python que você está instalando, ou seja, python3.4 no meu caso, mas falha. É por isso que o python2 ainda está instalado. Mas dpkg ainda acredita que o pacote " python " foi removido e substituído pelo novo instalado (python3.4). O arquivo / var / lib / dpkg / status foi editado de acordo. No meu caso, aqui está a atualização relacionada a esta instalação:

  

Pacote: python
  Status: deinstall ok instalado
  Prioridade: extra
  Seção: checkinstall
  Tamanho instalado: 167520
  Mantenedor: root @ laptop
  Arquitetura: amd64
  Versão: 3.4.3-1
  Fornece: python
  Descrição: Pacote criado com o checkinstall 1.6.2 '

Como você pode ver em negrito, o nome do pacote é " python " e o pacote foi " deinstall " antes de ser instalado novamente .

Assim, dpkg acha que " python " (python2!) não existe mais e sugere que você remova tudo o que for dependente quando você chamar apt-get -f install !

Solução para evitar esse problema:

Basta escolher um nome "Pacote" diferente e "Fornecer" o nome ao usar o checkinstall! Por exemplo, python3.4-checkinstall para ambos.

Como resolver o problema quando já ocorreu

Para resolver essa bagunça, tenho uma solução que permite que você não precise remover todos os binários instalados manualmente, como electrometro sugeriu fazer, o que acho que pode ser perigoso.

Siga estas etapas:

  1. Edite manualmente o nome do pacote python in /var/lib/dpkg/status de python para python-3.4-checkinstall por exemplo. Seja cuidadoso. O novo nome não deve ter sido usado já! Altere também "Fornece" para o novo nome.
  2. Use sudo dpkg-reconfigure python-3.4-checkinstall . (Nota: dpkg-reconfigure -a como sugerido electrometro não existe mais no Ubuntu 16.04. De qualquer forma não é necessário).
  3. Execute apt-get -f install que instalará o pacote python original novamente! Neste ponto você pode parar por aqui, mas se você tentar sudo dpkg-query -L python3.4-checkinstall : o dpkg não sabe mais quais arquivos foram instalados !!! Porque o arquivo /var/lib/dpkg/info/python3.4-checkinstall.list não existe! O arquivo /var/lib/dpkg/info/python.list foi substituído por apt-get -f install . Veja a documentação Debian para mais informações sobre dpkg . Para resolver este problema, você deve fazer o passo 4.
  4. Reinstale o python3.4 do zero usando o checkinstall, mas sem esquecer de alterar o nome do "Pacote" e o nome "Fornecer" como sugerido anteriormente! Use o mesmo nome da etapa 1. Não é necessário excluir os binários manualmente antes de fazer isso. O objetivo desta etapa é ter uma instalação limpa do python3.4 e ser capaz de desinstalá-lo usando o arquivo .deb recém-criado.

E é isso! Tudo deve estar limpo agora. Na verdade, eu corri o passo 3 antes do passo 2, mas deve ser mais limpo fazer isso dessa maneira.

Para informações, a etapa que usei para instalar o python3.4 a partir do pacote de origem usando o checkinstall é o seguinte:

  1. No diretório de origem, execute ./configure .
  2. Executar make
  3. Executar sudo checkinstall
  4. Etapa mais importante . Neste ponto, eles perguntam se você deseja modificar qualquer campo antes de instalar. Modifique "Package" e "Provides" de "python" para um nome exclusivo diferente (como "python3.4-checkinstall" como sugeri).

Espero que ajude!

Felicidades, Nicolas

    
por N. Gimenez 19.04.2017 / 19:46