Fiz algum dano executando “sudo apt-get purge ./python”?

6

Como você sabe, o Ubuntu já possui python . No entanto, eu fiz o download do código fonte da última versão 3.5.1 e o compilei usando

./configure
make
make test
sudo make install

Meu pwd neste momento é /home/SarpSTA/Downloads/Python-3.5.1

Eu queria executar purge nessa nova instalação.

sudo apt-get purge python não faria, já que seu caminho estava executando a versão antiga e não a nova instalação. Então, enquanto ainda estava na pasta, eu corri sudo apt-get purge ./python . Criou uma saída muito longa que era como:

E: Release 'python' for 'package-name' was not found

para cada pacote que eu instalei no meu computador no lugar de package-name .

Eu deletei algo ou o código foi simplesmente um fracasso?

    
por SarpSTA 21.02.2016 / 00:11

3 respostas

15

Não é assim que funciona. Você só pode usar apt-get purge com pacotes instalados pelo APT ou dpkg (pacotes Debian .deb). Se você compilou o seu software a partir do código-fonte, o APT não irá rastreá-lo.

Se você ainda tiver sua pasta de código-fonte, cd e execute sudo make uninstall . Este comando deve excluir o software compilado.

Se você não tiver mais a fonte, recomendo que você faça o download novamente, execute ./configure dentro dela e, em seguida, sudo make uninstall .

Seja muito cuidadoso para não excluir a instalação padrão do Python . É uma parte muito importante do Ubuntu e você terá um sistema quebrado se você o excluir.

Então não, você não fez nenhum dano executando sudo apt-get purge ./python , porque o pacote não foi encontrado.

    
por Eduardo Cola 21.02.2016 / 00:20
7

Não. Esse comando não causou nenhum dano. Não fez nada além de fornecer a mensagem de erro indicando que não foi possível executar a tarefa.

No que diz respeito a tentar limpar a versão instalada, não é necessário limpá-la, basta criar um link simbólico para a versão instalada que você deseja para seu padrão. Claro que você também pode alternativamente chamar python pelo caminho completo da versão instalada.

Exemplo:

$ /usr/bin/python3.7 myprogram.py

O comando apropriado para a desinstalação seria fornecer o nome do pacote como o parâmetro remove.

Exemplo para remover um pacote:

$ sudo apt-get remove python

Você pode informar o link simbólico atual em seu sistema executando:

$ ls -l /usr/bin/python*

O comando acima também mostrará outras versões que estão instaladas.

É claro que muitos programas usam o shebang ( #! ) para especificar o interpretador de programa a ser executado. Você pode ver um exemplo disso executando este comando:

$ egrep python * | egrep "/usr/bin/python"

A saída do comando acima mostrará o nome de vários aplicativos python com a versão especificada para execução. O programa e o comando a executar são separados por dois pontos na lista.

    
por L. D. James 21.02.2016 / 01:00
7

Para entender o que o apt-get purge ./python tentou fazer, siga as manpage . Primeiro, a sintaxe geral:

apt-get [-asqdyfmubV] [-o=config_string] [-c=config_file]
        [-t=target_release] [-a=architecture] {update | upgrade |
        dselect-upgrade | dist-upgrade |
        install pkg [{=pkg_version_number | /target_release}]...  |
        remove pkg...  | purge pkg...  |
        source pkg [{=pkg_version_number | /target_release}]...  |

Você verá que apt-get suporta a especificação de uma liberação de destino por meio de /foo . Portanto, em ./python , apt-get interpretou python como uma liberação de destino. Nós vamos voltar a isso em um momento.

Agora, e quanto a . ? apt-get suporta expressões regulares e, se o nome do pacote contiver . , * , etc., ele será tratado como uma expressão regular. E apt-get verifica correspondências parciais - desde que a expressão determinada corresponda a uma parte do nome de um pacote, esse pacote é selecionado:

If no package matches the given expression and the expression
contains one of '.', '?' or '*' then it is assumed to be a POSIX
regular expression, and it is applied to all package names in the
database. Any matches are then installed (or removed). Note that
matching is done by substring so 'lo.*' matches 'how-lo' and
'lowest'. If this is undesired, anchor the regular expression with
a '^' or '$' character, or create a more specific regular
expression.

. corresponde a todos os caracteres - então todos os nome do pacote irão satisfazê-lo. Portanto, apt-get selecionará todos os pacotes que conhece.

Agora, de volta ao release de destino, ele é usado para especificar qual repositório você deseja segmentar para essa operação, se o mesmo pacote for fornecido por vários repositórios. Veja como instalar atualizações de um repositório específico?

python não é um lançamento válido no Ubuntu padrão (e é improvável que seja um de qualquer maneira). Portanto, mesmo que apt-get tenha selecionado todos os pacotes que conhecia , não foi possível encontrar uma versão correspondente e, portanto, falhou.

    
por muru 21.02.2016 / 14:32

Tags