Por que python 3 não é o binário python padrão?


42

Eu digito pythonem uma janela do terminal. Eu recebo o Python 2.7 e não o Python 3.5. De acordo com a documentação, o Python 3.5 deve vir pré-carregado.


1
Se você configurar um ambiente virtual usando: "python3 -m venv my-venv", a partir de qualquer terminal, ative esse ambiente virtual chamando "source ... / my-env / bin / enable", o python 3.5 será o padrão nesse terminal. Você pode verificar a versão padrão atual chamando "python -V".
Craig Hicks

enquanto sua resposta é útil, perguntei o porquê. não como. e esse é o grande debate. aqui. por que uma versão mais antiga, por padrão, em vez da versão atual.
Givonz

1
Você está exatamente correto sobre o meu "comentário"! Por isso escrevi um comentário e não uma resposta.
Craig Hicks

Respostas:


56

Não sei o que "docs" você está lendo nem o que eles dizem, mas /usr/bin/pythoné apenas um link simbólico para a versão padrão do python, neste caso 2.7, que é o resultado de apenas digitar pythonno terminal. Este é o resultado do PEP 394, que define que

  • por enquanto, todas as distribuições devem garantir que pythonse refiram ao mesmo destino quepython2 .

type pythone file /usr/bin/pythonconfirmará isso.

A razão para esse arranjo que não seja a convenção é que o pacote de código - fonte python-default do Xenial é a versão 2.7.11 , portanto o link simbólico do python aponta para esta versão.

Para usar o python 3, você deve ser explícito e digitar python3na linha de comando, o que é recomendado caso você precise de uma versão específica, isso também pode ser feito com o python 2, digitando python2. O Ubuntu inclui as versões python 2 e 3 por padrão em todas as versões atuais.

Existem planos para migrar tudo para o python 3 e marcá-lo como padrão.


Provavelmente, isso está quebrando o plug-in rhythmbox-zeitgeist, que depende do zeitgeiigeist-python3, mas não foi possível encontrá-lo.
Khurshid Alam

2
Este é o documento que o OP significa.
SaidbakR

10

Para obter o Python 3.5 REPL ou executar um script compatível, digite python3. Isso é para manter a compatibilidade com todo o python 2.x herdado (que sempre foi e permanecerá vinculado python).

O traço pode ser encontrado pythonse você configurar um .desktoparquivo para ele (pol ~/.local/share/applications/), para abrir um terminal e iniciar o REPL, por exemplo. Não existe um ambiente GUI REPL padrão para python, e as expectativas normais da interface são de que o usuário iria ao terminal.

A palestra de que o python 3.5 é o padrão é os mantenedores que transportam todos os scripts do sistema do python 2.x para o python 3.x, não que o python 3 substitua o python 2 em todos os casos.


Então, acho que a pergunta correta é: como adiciono python3 no meu caminho, para que ele seja executado automaticamente?
Givonz

você quer dizer, como você obtém scripts python para executar como um programa compilado?
Andrew Keech

entendi obrigado. basta digitar python3 no prompt de comando.
Givonz

2
AIUI o que fazer com / usr / bin / python a longo prazo ainda é uma questão em aberto. A melhor prática para scripts python2 seria usar python2 explicitamente.
Peter Green

1
em vez de usar #!/usr/bin/python3(ou #!/usr/bin/python2) em scripts, é melhor usar (apenas para python, especificamente) #!/usr/bin/env python3se você quiser que seja remotamente portátil. Na maioria das vezes, isso é apenas documentação, pois em muitos casos será chamado de $ python3 your_pyprogram.pyqualquer maneira.
5136 Michael

4

Você assume que o Python padrão deve estar disponível como python. Essa suposição está errada.

Em um sistema que vem com o Python 3 "pré-carregado" e sem o Python 2, haverá apenas python3e não python.

O código escrito para o Python 3 deve sempre procurar um intérprete chamado python3. O código escrito para o Python 2 procurará historicamente python.

Pode chegar um momento, possivelmente daqui a algumas décadas, em que quase ninguém se lembra do Python 2, quando pythonpode começar a se referir python3. Isso seria puramente por conveniência, e pode e não deve ser feito prematuro, se é que existe! Não há pressa, devido ao seguinte impacto:

Os sistemas “antigos atuais” não terão conhecimento python2, apenas python, portanto, faz todo o sentido manter o código Python 2 procurando python. Esta é a razão pela qual pythondeve se referir ao Python 2 para "enquanto existir o código Python 2".

Um novo código escrito para Python 2, se isso faz sentido, pode ser perfeitamente procurado python. Ele também pode procurar python2, se se destina a ser executado apenas em sistemas compatíveis e bem preparados para o Python 3 (que devem oferecer esse link).

O benefício do uso do código Python 2 python2seria que ele não precisa de toque extra quando pythoncomeça a se referir a python3, o que pode nunca acontecer, ou pythondesaparece uma vez , o que pode ou não acontecer. (Isso pode se tornar realidade, se o código Python 2 desaparecer depois que o hipotético Python 4 se tornar popular com seu intérprete python4. - Porque deixá-lo apontar para um python3ou python4ambos seria confuso.)


2

Python ambas as versões 2.x, 3.x estão disponíveis. se você chamar python, como é indicado no python 2.x, ele carregará o python 2.x

A imagem abaixo o ajudará.

insira a descrição da imagem aqui


1
como você digita o mesmo comando e obtém 2 resultados diferentes?
Givonz

4
a saída diferente da segunda chamada de pythoné de use <tab>para consultar o preenchimento automático, que emite as possíveis permutações de python*e retorna para um novo prompt.
Andrew Keech

@givonz, hmm Eu usei a tecla TAB bro. não é saída. é possível padrão binário.
25416

Votação negativa para quê?
rɑːdʒɑ

2
Não diminuí a votação, mas acho que a resposta deve explicar por que as 2 primeiras saídas são diferentes e qual é o papel delas apt-cache, especialmente para iniciantes do Ubuntu.
AL

2

O Python 3.x deve funcionar com 16.04 - Na verdade, definitivamente funcionará. Eu tenho o Ubuntu 14.04 e o Python 3.4.3 - Tudo o que você precisa fazer para testá-lo é digitar python3e deve informar qual versão você está executando.


2
Bem, eu não chamaria de usar uma ciência da computação do sistema operacional. E estritamente falando: o Ubuntu é um sistema operacional baseado em Linux e não em Unix.
Magu_ 25/05

Eu ainda tenho que entender o diff bet linux e unix, além de alguns prompts de comando e comandos diferentes, mas com palavras estreitas. embora o gui seja muito mais avançado do que o que vejo no solaris.
Givonz

1
-1 Isso não aborda a questão do porquê .
David Foerster
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.