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:
- 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.
- 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).
- 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.
- 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:
- No diretório de origem, execute
./configure
.
- Executar
make
- Executar
sudo checkinstall
-
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