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.