desinstalar o Python instalado pela fonte de compilação?

18

Eu instalei o Python 2.7.9 no Ubuntu 14.04 compilando sua origem , por .configre, make, e make altinstall. make altinstallé porque não quero sobrescrever o Python 2.7.6 padrão. Meu auto-instalado 2.7.9 está dentro /usr/local/bin/python2.7e muitos outros arquivos em outros diretórios abaixo /usr/local. Do README no pacote de instalação de origem:

Nos sistemas Unix e Mac, se você pretende instalar várias versões do Python usando o mesmo prefixo de instalação (argumento --prefix para o script configure), certifique-se de que o executável principal do python não seja sobrescrito pela instalação de uma versão diferente.

Todos os arquivos e diretórios instalados usando o "make altinstall" contêm as versões principal e secundária e, portanto, podem viver lado a lado. "make install" também cria $ {prefix} / bin / python, que se refere a $ {prefix} /bin/pythonX.Y.

Se você pretende instalar várias versões usando o mesmo prefixo, você deve decidir qual versão (se houver) é a sua versão "primária". Instale essa versão usando "make install". Instale todas as outras versões usando "make altinstall".

Por exemplo, se você deseja instalar o Python 2.5, 2.6 e 3.0, sendo 2.6 a versão principal, execute "make install" em seu diretório de construção 2.6 e "make altinstall" nos outros.

Agora eu quero desinstalar o meu auto-instalado 2.7.9.

  1. Felizmente ainda tenho o código fonte, mas infelizmente o Makefile não possui a seção de desinstalação

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. Então tentei de outra maneira: primeiro crie um deb a partir da fonte e da compilação, instale o deb (substituindo os arquivos instalados a partir de make altinstall) e, em seguida, desinstale o deb.

    Mas quando eu crio o arquivo deb por checkinstall, não tenho certeza se e como devo fazer diferente para make altinstallfor make install. O que eu tentei é:

    $ checkinstall altinstall
    
    ...
    
    Installing with altinstall...
    
    ========================= Installation results ===========================
    /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: 4: /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: altinstall: not found
    
    ...

    Gostaria de saber como posso criar um deb para que a instalação do deb duplique o processo de instalação do make altinstall?

  3. Ou qual é a sua maneira de desinstalar o meu python 2.7.9?

Nota: o pacote fonte no primeiro link também possui setup.py, install-shalém disso README.

Tim
fonte
O Python não é instalado em muitos lugares. Gostaria apenas de remover os arquivos manualmente.
Faheem Mitha 17/03/2015
thanks.what não são muitos lugares então?
Tim
Dê uma olhada em um dos pacotes binários. Acho que /usr/localé essencialmente o mesmo lugar, exceto que é usado em vez de /usr. dpkg -L python2.7e dpkg -L python2.7-minimal. E o que você precisa 2.7.9?
Faheem Mitha 17/03/2015
Ouvi dizer que ele tem pip por padrão. Mas após a instalação, não acho que tenha pip.
Tim
Você pode instalar o pip apt-get install python-pip.
Faheem Mitha 17/03/2015

Respostas:

20

Os seguintes comandos removerão seu make altinstallpython -ed:

rm -f /usr/local/bin/python2.7
rm -f /usr/local/bin/pip2.7
rm -f /usr/local/bin/pydoc
rm -rf /usr/local/bin/include/python2.7
rm -f /usr/local/lib/libpython2.7.a
rm -rf /usr/local/lib/python2.7

Você também pode ter que fazer

rm -f /usr/local/share/man/python2.7.1
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/bin/idle
rm -f /usr/local/bin/easy_install-2.7

Embora make altinstalltenha me ajudado muito bem se o "python do sistema" tiver um número maior e menor do que você instala, ele não funciona tão bem se apenas o número micro (a terceira posição) for diferente. Esse número é excluído do binário instalado e você acaba com duas versões pythonX.Y. Isso sempre foi um problema, mas uma vez que as distribuições começaram a ser enviadas com utilitários de sistema com base no 2.7.X, esse problema foi mais grave, pois o 2.7 deveria ser o último da série Python2.

Na IMO, a melhor abordagem para resolver esse problema é impedir que ele se torne um: configure o python para instalar em um diretório não usado por nenhum outro python. No meu sistema eles afundam /opt/python/X.Y.Z.

Para usar qualquer um dos Pythons instalados lá, você usa [virualenv][1]para criar um novo ambiente:

virtualenv --python=/opt/python/2.7.9/bin/python2.7 venv
source venv/bin/activate

ou use [virtualenvwrapper][2]. Eu tenho alguns aliases para as versões mais recentes da série com as quais trabalho.

Se você estiver usando toxpara testar em várias versões (você deve), o seguinte alias ajudará a encontrar as várias versões:

alias tox='PATH=/opt/python/2.7.9/bin:/opt/python/2.6.9/bin:/opt/python/3.4.3/bin:/opt/python/3.3.6/bin:/opt/python/3.5-dev/bin:$PATH tox'

(atualmente, são as versões mais recentes, eu uso uma configuração ligeiramente diferente mantendo os links /opt/python/2.7para a mais recente /opt/python/2.7.9e também para os outros números menores, durante o processo de download, criação e instalação de uma nova versão python)

Essas instalações nunca são usadas diretamente. Eles sempre são usados ​​como base virtualenvapenas para ambientes, portanto, não me importo que eles não estejam no meu caminho normal.

Anthon
fonte
2
Não exclua /usr/local/lib/python2.7! Todos os módulos python globais instalados pelo pip vivem em /usr/local/lib/python2.7/dist-packages. Todos esses módulos vão quebrar!
Abhaga 6/10
2
@abhaga Você não deve instalar com pipfora de uma virtualenvem qualquer instalação do Linux
Anthon
Também não devemos desinstalar pacotes removendo manualmente arquivos e diretórios. :) Essas são boas práticas e sempre há ocasiões em que precisamos quebrá-las. Mas é importante saber que não é seguro remover esse diretório.
Abhaga 6/10
No meu CentOS7, existem alguns diferentes: 1. include deve ser: /usr/local/include/python2.7, sem bin; 2. O arquivo man é /usr/local/share/man/man1/python2.7.1; 3. Outro arquivo: /usr/local/bin/python2.7-config
Bin S
7

Começando na rmlista do @ Anthon e aplicando o conselho do @ bin-s para procurar arquivos mais recentes, vim com este script bash para eliminar completamente o meu Python-3.6.6 (que foi instalado a partir de fontes com make altinstall):

prefix='/usr/local/'
pyver='3.6'

rm -rf \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/pydoc \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}lib/pkgconfig/python-${pyver}.pc \
    ${prefix}lib/libpython${pyver}m.a \
    ${prefix}bin/python${pyver}m \
    ${prefix}bin/2to3-${pyver} \
    ${prefix}bin/python${pyver}m-config \
    ${prefix}bin/idle${pyver} \
    ${prefix}bin/pydoc${pyver} \
    ${prefix}bin/pyvenv-${pyver} \
    ${prefix}share/man/man1/python${pyver}.1 \
    ${prefix}include/python${pyver}m
    ${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.

Use-o com cuidado (por exemplo, adicione a -Iopção em rm cmd para verificar cada morte).

ankostis
fonte
muito agradável. Agora python3.X não aparece quando eu digito python3 e clico em tab
Prometheus
1

Normalmente, todos os arquivos são instalados em quase um minuto. Você pode usar "find" para verificar todos os arquivos instalados quase ao mesmo tempo e depois "rm" manualmente. Desejo útil.

find /usr/local/ -type f -newer <some latest old file>
Bin S
fonte