
Eu gostaria de usar apenas uma versão do Python3 para todos os meus pacotes em um sistema Gentoo. Procurei então as versões instaladas e descobri que estão instaladas três versões: 3.6, 3.7 e 3.8. Gostaria de converter todos os pacotes para 3.8 e deletar as versões anteriores.
Meu plano:
- Desmembrar Python 3.6 e 3.7.
- Defina o
USE
sinalizador para pacotes que usam Python parapython3_8 -python3_7 -python3_6
. - Reconstrua esses pacotes para
emerge --update --newuse
deixá-los usar o Python 3.8.
Então, depois de remover o Python 3.6 com:
emerge --ask -C dev-lang/python:3.6
Eu adicionei a linha
virtual/python-ipaddress python3_8 -python3_7 -python3_6
para /etc/portage/package.use
e correr
emerge --ask --update --newuse --deep virtual/python-ipaddress
e eu recebo
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild NS ] dev-lang/python-3.6.11-r2 [2.7.18-r1, 3.7.8-r2, 3.8.4-r1] USE="(threads%*)"
Would you like to merge these packages? [Yes/No]
Não entendo esse comportamento: por que o emerge deseja instalar python-3.6
se /etc/portage/package.use
especifica que deve usar 3.8
? E por que a USE
variável não contém nenhuma especificação Python? Existe outro arquivo de configuração que tenha prioridade mais alta /etc/portage/package.use
e redefina a USE
variável? Pelo que entendi lendoa documentação, isso não deveria acontecer.
Responder1
Aliás, python não é um pacote comum no Gentoo. (principalmente porquetransporteem si depende do python.) => Outras variáveis também são importantes para serem definidas. E precisa ser coerente. A ideia por trás dos sinalizadores USE é que eles sejam reservados para definir as preferências do usuário. Preferências que podem, na pior das hipóteses, tornar um pacote inoperante, mas em nenhum caso quebrar todo o sistema.
A versão Python é definitivamenteNÃOuma preferência do usuário. NÃO! O usuário simplesmente não consegue acordar e decidir: quero apenas Phython XYZ! Bem... sim... o usuário pode... Às suas próprias custas.
Para atingir seu objetivo (pelo que entendi), eu definitivamente não teria continuado (altamente arriscado*) caminho que você seguiu.
Prefiro ter seguido o procedimento detalhadoaqui sob o parágrafoAtualização de versão.
Aliás: também tome cuidado com oselecionarcoisa.
Para não dizer e por interesse... no final das contas... por que diabos você iria querer isso?
Tux ~ $ equery size python-2.7.18-r1
dev-lang/python-2.7.18-r1
Total files : 4177
Total size : 63.28 MiB
Tux ~ $ equery size python-3.7.8-r2
dev-lang/python-3.7.8-r2
Total files : 6616
Total size : 98.74 MiB
Recuperando menos de 200 MB no total com a despesa potencial de quebrar coisas interessantes diversas?
Prestar atenção! : Você nunca realmenteconverter, porte um programa de uma versão de idioma para outra mexendo nos sinalizadores de uso. Você apenas irá vinculá-lo a algumas bibliotecas diferentes que, se o programa não for compatível, irão quebrar tudo.
Altamente arriscado (*): eu nunca tentaria desmembrar qualquer pacote antes de verificar o fato de que nenhum pacote instalado depende estritamente dele. Quero dizer, programas que não foram portados do python 2 para o python 3, por exemplo. (Eu pessoalmente recebo alguns que definitivamente justificam a existência de python-2.7.18-r1 em meus sistemas)
Não quer dizer que se você removeu com sucesso 3.6 e 3.7, você quase certamente quebrou nada menos que o superficial (2.62.6), wireshark, git... cujas versões estáveis mais recentes, até onde posso ver, ainda não 3.8 compatível...
Não quer dizer que você poderia até mesmo ter quebrado o próprio portage, proibindo qualquer chance de se recuperar disso graças aos backups que você... quase certamente... evitou criar....
Responder2
Conforme já observado nas respostas anteriores, não é seguro remover o pacote e depois tentar alterar a configuração para torná-lo desnecessário. A abordagem segura é o contrário - altere sua configuração (ajustando sinalizadores USE, (des)mascarando versões) para que o próprio sistema reconheça que o pacote não é necessário (isso pode exigir a reinstalação de alguns pacotes) e o sistema irá removê-lo sozinho via emerge --depclean
.
Quanto à pergunta original, onde o python foi removido à força, basta colocar --tree
a opção para o comando emerge update. Ele então listará não apenas os pacotes a serem instalados, mas também o que os trouxe para a árvore.
Provavelmente existe um pacote que ainda depende do python:3.6
.
Responder3
Quando estou atualizando o Python, aqui estão as etapas que executo (baseadas parcialmente ema wiki do Gentoo):
Em
/etc/portage/make.conf
, adicione ou atualizePYTHON_TARGETS
ePYTHON_SINGLE_TARGET
para a versão Python que desejo usar (por exemplo,PYTHON_TARGETS="python3_9 python3_8"
ePYTHON_SINGLE_TARGET="python3_9"
). Observe que o wiki do Gentoo recomenda fazer isso empackage.use
: qualquer um deve funcionar, pois é uma mudança global.Execute
emerge -puvDN --with-bdeps=y @world
para verificar se nenhum pacote está insatisfeito com as alterações.Adicione ou atualize os sinalizadores Python
USE
para pacotes individuais.
Eu recomendaria fortemente contra o uso de, emerge -C
a menos que você estejaabsolutamentecertifique-se de que nenhum pacote esteja usando esse pacote! Especialmente no caso do Python, você poderia fazer com que isso emerge
não funcionasse.