Como definir a versão padrão do Python para 3.x no OS X?


329

Estou executando o Mountain Lion e a versão básica básica do Python é 2.7. Eu baixei o Python 3.3 e quero configurá-lo como padrão.

Atualmente:

$ python
    version 2.7.5
$ python3.3
    version 3.3

Como faço para configurá-lo para que toda vez que eu o execute $ pythonabra o 3.3?



Você pode gerenciar a versão do python com pyenv.
Shin Kim

Respostas:


580

Alterar a versão do executável python padrão em todo o sistema pode interromper alguns aplicativos que dependem do python2.

No entanto, você pode alias os comandos na maioria dos shells, já que os shells padrão no macOS (bash na 10.14 e abaixo; zsh na 10.15) compartilham uma sintaxe semelhante. Você pode colocar o alias python = 'python3' no seu ~/.profilee, em seguida, fonte~/.profile no seu ~/.bash_profilee / ou seu ~/.zsh_profilecom uma linha como:

[ -e ~/.profile ] && . ~/.profile

Dessa forma, seu alias funcionará em shells.

Com isso, o pythoncomando agora chamapython3 . Se você quiser chamar o python "original" (que se refere ao python2 ) ocasionalmente, poderá usar o command pythonque deixará o alias intocado e funcionará em todos os shells.

Se você iniciar intérpretes com mais frequência (eu faço) , sempre poderá criar mais aliases para adicionar, ou seja:

alias 2='python2'
alias 3='python3'

Dica: para scripts, em vez de usar um shebang como:

#!/usr/bin/env python

usar:

#!/usr/bin/env python3

Dessa forma, o sistema usará python3 para executar executáveis python .


2
Isso não deve ser colocado em ~ / .bash_profile em vez de ~ / .bash_aliases?
precisa

4
Colocar alias python=python3e depois correr pythonno meu terminal com osx el capitan não funcionou para mim. Tentei salvá-lo tanto ~ / .bash_aliases e ~ / .bash_profile.
precisa

43
@ Haymaker87 executado source ~/.bash_profileapós editar o ~/.bash_profilearquivo.
Wei Lu

15
Você pode fazer o mesmo com o pip: #alias pip='pip3.6'
311 stephen

@ surfer190 que causará problemas ao executar com o sudo, não é?
Santosh Kumar 12/08

142

Você pode resolvê-lo por link simbólico.

unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python

25
Esta é a resposta correta (os alias são bons, mas acessíveis apenas pelo bash, o que limita de onde você pode ligar). No entanto, eu usaria em unlinkvez de rmremover links simbólicos (se você acidentalmente adicionar uma barra final, rmpoderá ter alguns resultados ruins). Como alternativa, você pode fazer o ln -s -f ...que deve substituir o link simbólico atual.
Chad Befus 27/10/19

2
@ChadBefus Obrigado pela sua resposta. Concordo com sua opinião. desvincular é mais seguro que rm.
22817 Shin Kim

3
Isso tem consequências para os scripts que esperam pythonser python2.7?
Anton Tarasenko

19
MacOS:unlink: /usr/bin/python: Operation not permitted
MarksCode

4
@MarksCode tente apenas executar a segunda linha original (ou seja, ln -s... com /local/ ).
EliadL 25/09/19

42

Abra o arquivo ~ / .bash_profile .

vi ~/.bash_profile

Em seguida, coloque o alias da seguinte maneira:

alias python='python3'

Agora salve o arquivo e execute o arquivo ~ / .bash_profile .

source ~/.bash_profile

Parabéns !!! Agora, você pode usar python3 digitando python .

python --version

Python 3.7.3


Se você descobriu como eu fiz que o mesmo problema se aplica ao pip (ou seja, a versão do pip ainda é 2.7.x), você precisará executar as mesmas etapas para o pip3. vi ~ / .bash_profile, alias pip = 'pip3', fonte ~ / .bash_profile, pip --version
SnellyBigoda

Eu realmente preciso source ~/.bash_profilesempre que reabrir meu terminal? Ele reverte para python2 quando eu fecho e abro o terminal novamente.
Ricky Aguilar

21

Vá para o tipo de terminal:

alias python=python3.x

Isso configurará o python padrão como python3.x


1
Isso funcionou para mim, mas usando "alias python = python3"
Discant 15/03

Isso definirá temporariamente a versão python para essa instância do terminal.
Ashwin R

12

O seguinte funcionou para mim

cd /usr/local/bin
mv python python.old
ln -s python3 python

10

Estou um pouco atrasado para o jogo, mas achei que deveria postar uma resposta atualizada, pois acabei de encontrar esse problema. Observe que isso se aplicará apenas a uma configuração baseada em Mac (eu não tentei com o Windows ou com qualquer sabor do Linux).

A maneira mais simples de fazer isso funcionar é instalar o Python via Brew . Se você não tiver o brew instalado, precisará fazer isso primeiro. Depois de instalado, faça o seguinte no terminal:

brew install python

Isso instalará o Python 3. Depois de instalado, execute o seguinte:

ls -l /usr/local/bin/python*

Você verá todos os links criados pelo brew para a instalação do Python. Vai parecer algo assim:

lrwxr-xr-x  1 username  admin  36 Oct  1 13:35 /usr/local/bin/python3@ -> ../Cellar/python/3.7.4_1/bin/python3
lrwxr-xr-x  1 username  admin  43 Oct  1 13:35 /usr/local/bin/python3-config@ -> ../Cellar/python/3.7.4_1/bin/python3-config
lrwxr-xr-x  1 username  admin  38 Oct  1 13:35 /usr/local/bin/python3.7@ -> ../Cellar/python/3.7.4_1/bin/python3.7
lrwxr-xr-x  1 username  admin  45 Oct  1 13:35 /usr/local/bin/python3.7-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7-config
lrwxr-xr-x  1 username  admin  39 Oct  1 13:35 /usr/local/bin/python3.7m@ -> ../Cellar/python/3.7.4_1/bin/python3.7m
lrwxr-xr-x  1 username  admin  46 Oct  1 13:35 /usr/local/bin/python3.7m-config@ -> ../Cellar/python/3.7.4_1/bin/python3.7m-config

A primeira linha neste exemplo mostra o python3link simbólico. Para defini-lo como o pythonlink simbólico padrão, execute o seguinte:

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

Depois de definido, você pode:

which python

e deve mostrar:

/usr/local/bin/python

Você precisará recarregar seu shell de terminal atual para que ele use o novo link simbólico nesse shell; no entanto, todas as sessões de shell recém-abertas (devem) o usarão automaticamente. Para testar isso, abra um novo shell de terminal e execute o seguinte:

python --version

Funciona muito bem ( Referência )
Nepo Znat

9

Vá para 'Aplicativos', digite a pasta 'Python', deve haver um script bash chamado 'Atualizar perfil de shell.command' ou semelhante. Execute esse script e deve fazê-lo.

Atualização: Parece que você não deve atualizá-lo: como alterar a versão padrão do python?


8

Isso funcionou para mim. Eu adicionei o alias e reiniciei o meu terminal :

alias python=/usr/local/bin/python3

6

Acredito que a maioria das pessoas que chegaram aqui está usando o ZSH thorugh iterm ou o que quer que seja, e isso leva você a essa resposta .

Você precisa adicionar / modificar seus comandos ~/.zshrc.


3

Não tenho certeza se isso está disponível no OS X, mas no linux eu usaria o modulecomando. Veja aqui .

Configure o modulefile corretamente e adicione algo assim ao seu arquivo rc (por exemplo, ~ / .bashrc):

module load python3.3

Isso fará com que seus caminhos sejam alternados conforme necessário quando você efetuar login sem afetar os padrões do sistema.


3

Eu acho que quando você instala o python, coloca as instruções do caminho de exportação no seu arquivo ~ / .bash_profile. Portanto, se você não pretende mais usar o Python 2, basta remover essa declaração de lá. O alias, como mencionado acima, também é uma ótima maneira de fazer isso.

Aqui está como remover a referência de ~ / .bash_profile - vim ./.bash_profile - remover a referência (AKA algo como: export PATH = "/ Usuários / bla / anaconda: $ PATH") - salvar e sair - fonte ./ .bash_profile para salvar as alterações


Isso não acontece #
47017 co2f2e

3
$ sudo ln -s -f $(which python3) $(which python)

feito.



1

Se você estiver usando a virtualenvwrapper, basta localizá-lo usando which virtualenvwrapper.sh, abra-o usando vimou qualquer outro editor e altere o seguinte

# Locate the global Python where virtualenvwrapper is installed.
if [ "${VIRTUALENVWRAPPER_PYTHON:-}" = "" ]
then
    VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
fi

Mude a linha VIRTUALENVWRAPPER_PYTHON="$(command \which python)"para VIRTUALENVWRAPPER_PYTHON="$(command \which python3)".


1

Para mim, a solução foi usar PyCharm e definir a versão padrão do python para a que eu preciso trabalhar.

instale o PyCharm e vá para file ==> preferências para o novo projeto, depois escolha o intérprete que você deseja para os seus projetos, neste caso python 3.3


1

Se você usa macports, não precisa brincar com aliases ou variáveis ​​de ambiente, basta usar o método que o macports já oferece, explicado por estas perguntas e respostas:

Como: Macports selecionar python

TL; DR:

sudo port select --set python python27

1

Se você estiver usando macports, é uma maneira mais fácil de fazer:

corre:

port install python37

após a instalação, defina o padrão:

sudo port select --set python python37

sudo port select --set python3 python37

reinicie a janela do cmd, finalizada.


1

Bem ... É meio velho. Mas ainda merece uma boa resposta.

E o bom é que você não quer tocar no Python padrão no Mac.

Instale qualquer versão Python que você precisa através do Homebrew ou o que for e use-a no virtualenv. O Virtualenv é geralmente considerado algo parecido com uma porcaria, mas ainda é muito, muito melhor do que mudar a versão do python em todo o sistema (o macOS provavelmente se protegerá de tais ações) ou em todo o usuário, em todo o bash ... o que seja. Apenas esqueça o Python padrão. Usar playgrounds como o venv é o que o seu sistema operacional mais agradecerá.

O caso é que, por exemplo, muitas distribuições modernas do Linux se livram do Python2 instalado imediatamente, deixando apenas o Python3 no sistema. Mas toda vez que você tenta instalar algo antigo com python2 como uma dependência ... espero que você entenda o que quero dizer. Um bom desenvolvedor não se importa. Bons desenvolvedores criam playgrounds limpos com a versão python que desejam.


0

Usuários de Mac só precisam executar o seguinte código no terminal

brew switch python 3.x.x

3.xx deve ser a nova versão do python.

Isso atualizará todos os links do sistema.


0

Sugestões para alias python para python3 causarão problemas em ambientes virtuais que definem a versão do python (por exemplo: pyenv). Com o pyenv, você pode definir a versão globalmente da seguinte maneira:

pyenv global 3.8.2

e, em qualquer projeto específico, você pode criar um arquivo .python-version que contenha a versão python:

pyenv local 2.7.1

Esta é a melhor maneira de gerenciar várias versões do python em um sistema na minha opinião.

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.