Como fazer o comando do programa 'python' executar o Python 3?

331

O pythoncomando do programa executa o Python 2. O Python 3 pode ser executado usando o python3comando Como o Python 3 pode ser executado usando o pythoncomando?

Giri
fonte
30
Apenas um aviso: não tente alterar o link simbólico / usr / bin / python para apontar para python3 em vez de 2.7. Muitos programas disponíveis nos repositórios Ubuntu exigem que / usr / bin / python seja compatível com python 2.x.
soulsource
1
Ah, agora entendi o que você quis dizer com atualização ... Na verdade, os desenvolvedores do Ubuntu estão trabalhando nisso: wiki.ubuntu.com/Python/3 "É uma meta de lançamento do Ubuntu 14.04 LTS ter apenas Python 3 no CD da área de trabalho imagens ".
soulsource
1
Em outra nota, qualquer pessoa que venha aqui porque está tentando aprender como tornar o Python 3 o padrão, pode encontrar utilidade na pesquisa de ambientes virtuais (por exemplo, virtualenv) ou contêineres (por exemplo, LXC ou Docker).
Kevin
1
Em referência ao aviso do soulsource na parte superior, consulte o PEP 394, que padroniza as convenções de nomenclatura para executáveis ​​Python coexistentes e nas quais os programadores e mantenedores de pacotes Python (e devem) se baseiam.
David Foerster
2
@wjandrea, sim, mesmo em um ambiente virtual, pythondeve ser mantido como significativo python2. Eu quis dizer o meu comentário como uma maneira de ter uma versão Python específica do aplicativo, em vez de tentar solucionar o Python do sistema.
Kevin

Respostas:

370

Uma maneira simples e segura seria usar um alias. Coloque isso em ~/.bashrcou ~/.bash_aliasesarquivo:

alias python=python3

Depois de adicionar o acima no arquivo, execute source ~/.bashrcou source ~/.bash_aliases.

Por exemplo:

$ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3

Para contornar o alias, use o commandcomando interno:

$ command python --version
Python 2.7.6

Outra maneira de contornar o alias é usar \antes do comando.

$ \python --version 
Python 2.7.6

Para desativar o alias no shell atual, use o unaliascomando interno:

$ unalias python
$ python --version
Python 2.7.6
Radu Rădeanu
fonte
1
então nenhuma opção de "atualização" .. ??
Giri
4
Na verdade, eu quero apagar 2.7 e substituí-lo com 3.3. Parece que é uma má idéia para agora ..
Giri
35
+1, não há motivo para eliminar 2,7 para poder trabalhar com o 3.3. Como muitos softwares ainda dependem do 2,7; apenas mantenha-o por aí.
amigos estão dizendo sobre don.joey
6
@begueradj Um alias é totalmente diferente de um link simbólico .
Radu Rădeanu
1
Uma palavra de cautela: isso pode quebrar outros scripts que esperam o Python 2.7.
kmiklas
85

[Junho de 2016] O local recomendado para obter informações sobre a transição é a página oficial do Ubuntu Python .


No wiki do Ubuntu :

Para o Ubuntu e o Debian, temos objetivos de projeto em andamento para tornar o Python 3 a versão padrão preferida do Python nas distribuições.

O que isso não significa:

  • /usr/bin/pythonapontará para o Python 3. Não, isso não vai acontecer (a menos que o PEP 394 defenda o contrário, o que é duvidoso no futuro próximo). /usr/bin/pythone /usr/bin/python2apontará para Python 2.7 e /usr/bin/python3apontará para a versão mais recente suportada do Python 3.

  • O Python 2 será removido do arquivo. Não, isso não vai acontecer . Esperamos que o Python 2.7 permaneça suportado e disponível no Ubuntu por um longo tempo, dado que o PEP 373 promete suporte de manutenção de correção de bug upstream até 2020.

Não é recomendável alterar o link simbólico devido a outras dependências de pacotes, mas eles "têm objetivos de projeto em andamento para tornar o Python 3 a versão preferida padrão do Python nas distribuições".


Para uso CLI, como @Radu Rădeanu , eu recomendo colocar um alias no usuário ~/.bashrc, .bash_aliasesarquivo (os arquivos diferentes, incluindo ~/.bash_profile, são carregados pelo menos uma vez, são principalmente para fins de organização, mas pode variar por plataforma). Os ambientes virtuais Python também funcionam bem.

Exemplos de alias:

alias python=python3

ou

alias python='/usr/bin/python3'

Os scripts ainda devem usar algo como #!/usr/bin/env python3para compatibilidade cruzada.

Usar envé bom para uso misto com ambientes virtuais.

Nota (graças a @wjandrea): os aliases fazem parte do tempo de execução do bash, não do ambiente do usuário. Portanto, eles não estão disponíveis para o shebang ( #!). Se você preferir o alias python = python3, alguns program.pysem shebang poderão ser executados invocando o intérprete com alias como este python program.py. O alias também pode ser útil para sistemas com várias versões do python3 como 3.4 e 3.6 juntas.

Kevin
fonte
1
Isso parece estar desatualizado agora: eles planejavam remover o python2 no Xenial, mas não o fizeram.
OrangeDog
1
@OrangeDog, obrigado pela atualização. Sim, a página da wiki que citei agora está desatualizada, pois mais progressos foram feitos nos últimos dois anos para mudar apenas para o Python 3. A nova página para seguir essa progressão é a página oficial do Ubuntu Python .
21416 Kevin
A página "mais recente" também está desatualizada, referente aos planos do Xenial.
OrangeDog
Eu não diria que está "desatualizado" tanto quanto "não foi atualizado recentemente". Ainda parece ser o local atual para manter postagens sobre isso. No entanto, nos comentários aqui, eu gostaria de receber outras fontes recentes que alguém possa encontrar. Adicionar mais fontes à minha resposta, sobre por que não fazer a alteração apenas python, não é realmente relevante até que a conversão seja concluída. Mesmo assim, isso pode se tornar um problema.
Kevin
2
Os aliases são internos ao Bash, não fazem parte do ambiente, portanto, você ainda precisará usar python3em um shebang, não python.
wjandrea
28

Atualização: aprendi que esta é a maneira errada, pois Python2 e Python3 não são intercambiáveis.

Você pode tentar a ferramenta de linha de comando update-alternatives.

$ sudo update-alternatives --config python

Se você receber o erro "sem alternativas para python", configure você mesmo uma alternativa com o seguinte comando:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Mude o caminho /usr/bin/python3para a versão python desejada de acordo.

Webwurst
fonte
20
python2 e python3 não são alternativas. Não use as alternativas de atualização para esse fim.
Jobin
Por que eles não são? Um de vocês pode explicar por que update-alternativesnão é adequado para python? É por causa do legacy.python.org/dev/peps/pep-0394 ?
Dmitry Grigoryev
11
alternativas são implementações diferentes para as mesmas funcionalidades. python2 e python3 não fornecem as mesmas funcionalidades.
Ely
Você pode fazer algo assim se tiver instalado manualmente (via ppa ou o que for) outras versões do python3. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
David Baucum
Isto é o que eu precisava fazer para uma versão 18.04.2 que não vem com python. Graças
Escuro Star1
9

O Ubuntu, e o restante das distribuições Linux, ainda dependem amplamente do Python 2.7 para vários aplicativos e comandos. Se você alterar a referência padrão de "python" para Python 3.x, várias funções do Python começarão a gerar erros de asserção.

Por exemplo, no Ubuntu, 'pip' para um não funcionaria mais corretamente, a menos que você editasse diretamente o arquivo e alterasse o shebang para fazer referência a '#! / Usr / bin / env python2.7'. Nos sabores RHEL (Red Hat Enterprise Linux), como Red Hat, Fedora e CentOS, o comando 'Yum' também depende do Python 2.7.

O que quero dizer aqui é que você causaria uma quantidade significativa de código para começar a gerar erros de asserção apenas para digitar 'python' no terminal para fazer referência ao Python 3.x.

Você está muito melhor usando o comando 'python3' no terminal e o shebang '#! / Usr / bin / env python3' nos arquivos do Python 3.x.

Moony
fonte
2

Faz

cd ~
gedit .bash_aliases

então escreva

alias python=python3

ou

alias python='/usr/bin/python3'

Salve o arquivo, feche o terminal e abra-o novamente.
Ligação

Brisa
fonte
1

Você pode ligar simbolicamente /usr/bin/pythonpara python3com

sudo ln -s /usr/bin/python3 /usr/bin/python

e você pode impedir que o Python 2 e o pip2 sejam instalados como uma dependência do

sudo apt-mark hold python python-pip

Veja as outras respostas para saber por que você não deseja fazer isso. O Ubuntu 18.04+ não vem mais com o Python 2, portanto não deve ser tão ruim.

Boris
fonte
2
Em relação ao "Ubuntu 18.04 não vem mais com o Python 2, não deve ser tão ruim assim". , no Ubuntu (mesmo versões que não têm o Python 2 instalado por padrão), um executável chamado pythoné assumido como Python 2; portanto, isso pode quebrar algumas coisas.
Wjandrea
* python->/usr/bin/python
wjandrea
0
cat > /usr/local/bin/py
#!/bin/dash
python3 "$@"
<CTRL-D>

(desde que você tenha permissão de gravação para / usr / local / bin) da mesma forma

cat > /usr/local/bin/pyi
#!/bin/dash
python3 -i "$@"
<CTRL-D>

então você só digita py (e usa py em #! lines) para o python escolhido.

John Allsup
fonte
Não seria mais simples usar um link simbólico? sudo ln -s /usr/bin/python3 /usr/local/bin/py
Wjandrea 4/12
0

Acho muito útil simplesmente remover / usr / bin / python e / usr / bin / pip. Isso força todos os programas a confiar nos comandos "python2" e "python3".

Embora alguns pacotes opcionais e desatualizados dependam do #!/usr/bin/pythontrabalho, prefiro enviar patches para esses programas do que continuar cometendo erros estranhos e, às vezes, difíceis de depurar.

Erik Aronesty
fonte
-1

Você pode usar update-alternativespara fornecer versões diferentes de programas que podem ser necessárias em momentos diferentes devido a problemas de compatibilidade.

Esta resposta é um bom exemplo de como configurar as coisas para manter simultaneamente diferentes versões do gcc / g ++, por exemplo.

faça o mesmo com python2.7 e python 3.3

dcanelhas
fonte
2
Os usuários iniciantes podem não conseguir adaptar facilmente a resposta vinculada a uma situação diferente. Além de creditar a resposta anterior, seria bom definir as etapas necessárias para o Python.
chaskes
Aqui está eu encontrei uma boa solução passo a passo linuxconfig.org/…
woto
Python 2 e 3 não são alternativas - mesmo versões secundárias diferentes não são ( por exemplo ). Este método pode facilmente quebrar as coisas.
Wjandrea
Também esta é uma duplicata de esta resposta
wjandrea