Por que o Python 2.7 ainda é a versão padrão do Python no Ubuntu?

32

De acordo com a documentação oficial do Python, o suporte ao Python2.7 terminará próximo no futuro.

DEPRECAÇÃO: O Python 2.7 chegará ao fim de sua vida útil em 1º de janeiro de 2020. Atualize seu Python, pois o Python 2.7 não será mantido após essa data. Uma versão futura do pip deixará o suporte para o Python 2.7. Mais detalhes sobre o suporte a Python 2 no pip podem ser encontrados em https://pip.pypa.io/en/latest/development/release-process/#python-2-support

Por que o Ubuntu não está usando o Python3 como padrão em sua próxima versão?

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="19.04 (Disco Dingo)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.04"
VERSION_ID="19.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=disco
UBUNTU_CODENAME=disco
$ python
Python 2.7.16 (default, Apr  6 2019, 01:42:57) 
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
ラ ビ ナ ン ダ ン
fonte
2
Você pode instalar o pacote python3.7. O problema é que, em uma versão mint do ubuntu \ linux, às vezes ainda existem softwares antigos, então você precisa instalar os pacotes mais recentes manualmente.
enigma
8
@enigma Não é uma duplicata dessa pergunta porque o python3 já está instalado no sistema do ラ ビ ナ ン ダ ン por padrão, então ele tem o python e o python3 instalados um ao lado do outro.
karel

Respostas:

40

De acordo com as notas de lançamento do Bionic Beaver :

O Python 2 não é mais instalado por padrão. O Python 3 foi atualizado para 3.6. Esta é a última versão do LTS a incluir o Python 2 no main.

E a afirmação acima é verdadeira. O Python 2 não é instalado por padrão no 18.04 e versões lançadas depois disso. O Ubuntu já mudou quase todos os seus projetos do Python 2 para o Python 3. Por exemplo, de acordo com as notas de lançamento do Disco Dingo :

O Samba foi atualizado para a versão 4.10.x, e uma das grandes mudanças aqui é o suporte ao python3 . No Disco, o samba e suas dependências são todos python3 agora, com exceção do tdb. O tdb ainda cria um pacote python2, ou seja, python-tdb, mas todos os outros, incluindo o próprio samba, são apenas python3.

Além disso, mesmo antes do lançamento do Ubuntu 18.04, o Ubuntu / Canonical começou a pedir que os desenvolvedores mudassem para o Python 3 porque o fim está próximo . Do Python - Ubuntu Wiki :

Todo o desenvolvimento orientado pelo Ubuntu / Canonical deve ter como alvo o Python 3 no momento e todo o novo código deve ser somente para o Python 3. Se você não pode fazer isso por causa da sua pilha de dependências, vamos conversar.

Parece que no seu sistema o Python 2 foi instalado intencionalmente ou pode ser uma dependência de outro pacote cujo desenvolvedor não mudou para o Python 3. Você pode verificar os pacotes que dependem do Python 2 executando,

apt rdepends python

A razão pela qual o Python 2 é chamado quando pythoné executado está no ponto histórico do PEP 394 - O comando "python" em sistemas do tipo Unix :

O pythoncomando sempre deve chamar o Python 2 (para evitar erros difíceis de diagnosticar quando o código do Python 2 é executado no Python 3).

Kulfy
fonte
12
Para esclarecer o ponto final, o Python 3 não é compatível com o Python 2. Isso, combinado com o fato de o Python 2 ter mais suporte de biblioteca que o Python 3, significa que um grande número de desenvolvedores ainda tem uma dependência direta do Python 2. O Python 3 está fora do mercado há algum tempo, mas na verdade são as bibliotecas que são a razão pela qual o Python 2 ainda é tão usado, mesmo que não deva mais ser suportado (se bem me lembro, o suporte oficial terminou em 2018). EDIT: suporte oficial termina em 2020.
searchengine27
8
"... o fato de o Python 2 ter mais suporte de biblioteca que o Python 3 ..." - Você tem uma fonte para isso? Raramente encontro mais bibliotecas que não suportam o Python 3 e, de fato, algumas estão descartando o suporte ao Python 2! (Por exemplo, o Django, uma estrutura da Web popular do Python, não suporta o Python 2 há três lançamentos .) Sua declaração fazia sentido há cinco anos, mas hoje não acho que você possa fazer essa generalização abrangente sem fazer backup com estatísticas. .
marcelm 14/08
7
@ searchengine27 Não acho que essa biblioteca suporte fatores. A preocupação com a compatibilidade com versões anteriores é que o mundo está inundado de scripts aleatórios que começam com #!/usr/bin/pythonou equivalentes, o que seria interrompido se se pythontornasse python3, enquanto os scripts aleatórios que dependem do Python 3 são mais propensos a começar #!/usr/bin/python3.
James_pic 14/08
1
@ searchengine27 Há muito tempo, alguém criou um site "Python3 wall of Shame", que listava as dependências mais comuns e seu status python3 (que na época era péssimo). No entanto, já faz anos que ele foi alterado para Muralha de Superpotências do Python 3 desde que praticamente todas as dependências comuns foram migradas e as poucas que não estavam migrando estão mortas de qualquer maneira (o site não foi atualizado desde abril de 2018, agora basicamente tudo é capaz de python3).
Giacomo Alzetta
4
Apenas como uma adição: o fato de a Python Software Foundation parar de manter o Python 2 em 2020 não significa que a Canonical deixará de manter o Python 2 em 2020. De fato, o objetivo de usar uma distribuição Linux de um fornecedor respeitável é que tudo os pacotes na distribuição (para Debian / Ubuntu, que significa o repositório "principal") serão mantidos por toda a vida útil da versão de distribuição, independentemente do status de suporte do pacote original. Em outras palavras, o pacote Python 2 no Ubuntu 19.04 será mantido enquanto o Ubuntu 19.04 for.
Jörg W Mittag
0

Que eu saiba, apenas o arch linux fez isso: chamar python3do pythoncomando padrão . Apesar da recomendação do PEP 394 .

Pode ser alterado /usr/binredefinindo os links entre python, pythonXe pythonX.Y. Mas esteja preparado para lidar com muitos bugs, pois todos os seus scripts python2 exigirão um shell bang explícito:

#!/usr/bin/env python2

Um shell bang que raramente é usado em scripts antigos.

yota
fonte