Ao tentar instalar o AWS SAM CLI em uma caixa linux, tive que instalar o Homebrew/Linuxbrew. O pacote da AWS tem uma dependência do python 3, que já instalei no meu sistema. No meio dos logs de instalação do homebrew, vejo isso:
==> Pouring python-3.7.4.x86_64_linux.bottle.tar.gz
==> /home/linuxbrew/.linuxbrew/Cellar/python/3.7.4/bin/python3 -s setup.py --no-user-cfg install --force --verbose --install-scripts=/home/linuxbrew/.linuxbrew/Cellar/python/3.7.4
==> /home/linuxbrew/.linuxbrew/Cellar/python/3.7.4/bin/python3 -s setup.py --no-user-cfg install --force --verbose --install-scripts=/home/linuxbrew/.linuxbrew/Cellar/python/3.7.4
==> /home/linuxbrew/.linuxbrew/Cellar/python/3.7.4/bin/python3 -s setup.py --no-user-cfg install --force --verbose --install-scripts=/home/linuxbrew/.linuxbrew/Cellar/python/3.7.4
==> Caveats
Python has been installed as
/home/linuxbrew/.linuxbrew/bin/python3
Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
/home/linuxbrew/.linuxbrew/opt/python/libexec/bin
Seguindo qual:
$ which python3
/home/linuxbrew/.linuxbrew/bin/python3
Isso não me agrada, pois não avisou antes, não me deixou escolha e confio muito mais na minha distribuição do que no homebrew.
Meu primeiro pensamento foi remover o pacote:
$ brew uninstall python3
Error: Refusing to uninstall /home/linuxbrew/.linuxbrew/Cellar/python/3.7.4
because it is required by aws-sam-cli, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies python3
O que significa que não posso simplesmente removê-lo
Agora, ter uma dependência instalada é suportável, mas não se ela substituir meu pacote nativo do sistema, então minha pergunta é:
Existe uma maneira de dizer ao homebrew para não atrapalhar meu sistema no futuro e para recuperar meu python nativo?
O Linuxbrew instalará pacotes que fornecem dependências aos pacotes que você instala, conforme necessário. Às vezes, essas dependências (ou, nesse caso, pacotes que você instala com
brew
) fornecerão os mesmos serviços ou ferramentas que o software já presente em seu sistema. O Linuxbrew não substituirá o software já instalado por outros meios em seu sistema, pois o que ele instala é instalado em um local totalmente separado (por design).Para garantir que os comandos fornecidos por
brew
não tenham precedência sobre os comandos instalados de outras maneiras, certifique-se de que os váriosbin
diretórios do Linuxbrew sejam os últimos em seu$PATH
, ou pelo menos após osbin
diretórios que contêm seus comandos "nativos" em seu sistema.Acredito que o Linuxbrew adiciona o seguinte ao de um usuário
~/.bash_profile
(ou pede ao usuário para adicioná-lo, não me lembro):(ou algo semelhante).
Isso faz com que o comando
a ser executado, o que adiciona os caminhos do Linuxbrew à frente do seu arquivo
$PATH
.Você pode executar o
brew shellenv
comando em seu terminal e copiar sua saída em seu~/.bash_profile
arquivo (deve haver váriasexport
instruções), substituindo a chamada correspondente completamente e alterando oexport PATH
comando paraIsso garante que os comandos em seu padrão (não-Linuxbrew)
$PATH
tenham precedência sobre osbrew
comandos. Se isso quebrar algumbrew
pacote que dependa da versão de comandos do Linuxbrew ou não, não posso dizer.