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?
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.
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.
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.
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.
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.
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.
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.
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.
python
deve ser mantido como significativopython2
. 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.Respostas:
Uma maneira simples e segura seria usar um alias. Coloque isso em
~/.bashrc
ou~/.bash_aliases
arquivo:Depois de adicionar o acima no arquivo, execute
source ~/.bashrc
ousource ~/.bash_aliases
.Por exemplo:
Para contornar o alias, use o
command
comando interno:Outra maneira de contornar o alias é usar
\
antes do comando.Para desativar o alias no shell atual, use o
unalias
comando interno:fonte
[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 :
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_aliases
arquivo (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:
ou
Os scripts ainda devem usar algo como
#!/usr/bin/env python3
para 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, algunsprogram.py
sem shebang poderão ser executados invocando o intérprete com alias como estepython 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.fonte
python
, não é realmente relevante até que a conversão seja concluída. Mesmo assim, isso pode se tornar um problema.python3
em um shebang, nãopython
.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
.Se você receber o erro "sem alternativas para python", configure você mesmo uma alternativa com o seguinte comando:
Mude o caminho
/usr/bin/python3
para a versão python desejada de acordo.fonte
update-alternatives
não é adequado para python? É por causa do legacy.python.org/dev/peps/pep-0394 ?sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
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.
fonte
Faz
então escreva
ou
Salve o arquivo, feche o terminal e abra-o novamente.
Ligação
fonte
Você pode ligar simbolicamente
/usr/bin/python
parapython3
come você pode impedir que o Python 2 e o pip2 sejam instalados como uma dependência do
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.
fonte
python
é assumido como Python 2; portanto, isso pode quebrar algumas coisas.python
->/usr/bin/python
(desde que você tenha permissão de gravação para / usr / local / bin) da mesma forma
então você só digita py (e usa py em #! lines) para o python escolhido.
fonte
sudo ln -s /usr/bin/python3 /usr/local/bin/py
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/python
trabalho, prefiro enviar patches para esses programas do que continuar cometendo erros estranhos e, às vezes, difíceis de depurar.fonte
Você pode usar
update-alternatives
para 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
fonte