Como forçar um pacote a usar uma versão Python no Gentoo?

Como forçar um pacote a usar uma versão Python no Gentoo?

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 USEsinalizador para pacotes que usam Python para python3_8 -python3_7 -python3_6.
  • Reconstrua esses pacotes para emerge --update --newusedeixá-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.usee 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.6se /etc/portage/package.useespecifica que deve usar 3.8? E por que a USEvariável não contém nenhuma especificação Python? Existe outro arquivo de configuração que tenha prioridade mais alta /etc/portage/package.usee redefina a USEvariá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 --treea 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):

  1. Em /etc/portage/make.conf, adicione ou atualize PYTHON_TARGETSe PYTHON_SINGLE_TARGETpara a versão Python que desejo usar (por exemplo, PYTHON_TARGETS="python3_9 python3_8"e PYTHON_SINGLE_TARGET="python3_9"). Observe que o wiki do Gentoo recomenda fazer isso em package.use: qualquer um deve funcionar, pois é uma mudança global.

  2. Execute emerge -puvDN --with-bdeps=y @worldpara verificar se nenhum pacote está insatisfeito com as alterações.

  3. Adicione ou atualize os sinalizadores Python USEpara pacotes individuais.

Eu recomendaria fortemente contra o uso de, emerge -Ca menos que você estejaabsolutamentecertifique-se de que nenhum pacote esteja usando esse pacote! Especialmente no caso do Python, você poderia fazer com que isso emergenão funcionasse.

informação relacionada