Alterar a versão padrão do Python quebra o Ubuntu 20.04

Alterar a versão padrão do Python quebra o Ubuntu 20.04

Estou criando uma AMI deUbuntu 20.04(Focal Fossa), e quero que a versão padrão do Python seja 3.6.

Instalei o Python 3.6, também o pip correto, e depois configurei a alternativa assim:

update-alternatives --install \
  /usr/bin/python3 \
  python3 \
  /usr/bin/python3.6 \
  10

Mas então estou me deparando com muitos problemas relacionados aCPythonpacotes, como python3-apt(apt_pkg, apt_inst), netifacese provavelmente muitos mais que ainda não entendi.

Eles estão todos localizados /usr/lib/python3/dist-packagese os nomes dos pacotes estão neste formato:

{name}.cpython-38-x86_64-linux-gnu.so

O que faz sentido, já que a versão padrão do Python do Ubuntu 20.04 é o Python 3.8.

A solução imediata da pesquisa no Google é vincular o nome assim:

ln -s {name}.cpython-38-x86_64-linux-gnu.so {name}.so

Ou seja:

ln -s apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so
ln -s netifaces.cpython-38-x86_64-linux-gnu.so netifaces.so

Tentei reinstalar os pacotes relevantes ( apt install --reinstall python3-apt) quando a versão padrão do Python é 3.6, mas não funcionou, e esta solução de vincular os *.soarquivos não é escalável!

Existe uma maneira de fazer o Python 3.6 funcionar com os pacotes CPython padrão do sistema?

Responder1

Como você descobriu, o sistema depende dosistemaversão do Python sendo como esperado. Se você realmente deseja um sistema com Python 3.6, sua melhor aposta é encontrar uma versão (idealmente, ainda com suporte) usando Python 3.6: no seu caso, Ubuntu 18.04.

Se você deseja fornecer Python 3.6 para programas em execução em sua AMI, você pode usar ambientes virtuais em vez de substituir o sistema Python.pyenvé um bom lugar para começar.

Responder2

Administre o ambiente de qualquer máquina na nuvem como faria com uma máquina física perto de você. Se você trabalha com Ubuntu 20.x e sua instalação padrão do Python é 3.8, mas precisa do Python v3.6, instale um ambiente virtual conforme necessário. Você pode fazer isso com pyenv. O que você está fazendo no momento é interromper a instalação padrão do Python em câmera lenta, com todos os efeitos adversos que isso terá em inúmeros pacotes naquela máquina (baseados em nuvem ou não).

Eu adiciono umtutorialEscrevi sobre virtualização de ambientes Python, em caso de interesse (em particular em pyenv).

informação relacionada