Come impostare la versione predefinita di Python su 3.x su OS X?


329

Sto eseguendo Mountain Lion e la versione di base predefinita di Python è 2.7. Ho scaricato Python 3.3 e voglio impostarlo come predefinito.

Attualmente:

$ python
    version 2.7.5
$ python3.3
    version 3.3

Come lo imposto in modo che ogni volta che $ pythonlo eseguo apra 3.3?



Puoi gestire la versione di Python con pyenv.
Shin Kim,

Risposte:


580

La modifica della versione dell'eseguibile python predefinito a livello di sistema potrebbe interrompere alcune applicazioni che dipendono da python2.

Tuttavia, puoi alias i comandi nella maggior parte delle shell, poiché le shell predefinite in macOS (bash in 10.14 e precedenti; zsh in 10.15) condividono una sintassi simile. Puoi mettere alias python = 'python3' nel tuo ~/.profile, e quindi sorgente ~/.profilenel tuo ~/.bash_profilee / o tuo ~/.zsh_profilecon una linea come:

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

In questo modo, il tuo alias funzionerà su più shell.

Con questo, il pythoncomando ora invoca python3. Se vuoi invocare il python "originale" (che si riferisce a python2 ) a volte, puoi usare command python, che lascerà intatto l'alias e funzionerà in tutte le shell.

Se avvii interpreti più spesso (lo faccio) , puoi sempre creare anche più alias da aggiungere, ovvero:

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

Suggerimento: per gli script, invece di utilizzare un shebang come:

#!/usr/bin/env python

uso:

#!/usr/bin/env python3

In questo modo, il sistema utilizzerà python3 per eseguire eseguibili python .


2
Non dovrebbe essere inserito in ~ / .bash_profile anziché in ~ / .bash_aliases?
Inquietante:

4
Mettere alias python=python3e poi correre pythonnel mio terminale su osx el capitan non ha funzionato per me. Ho provato a salvarlo sia ~ / .bash_aliases che ~ / .bash_profile.
Haymaker87,

43
@ Haymaker87 eseguito source ~/.bash_profiledopo aver modificato il ~/.bash_profilefile.
Wei Lu,

15
Puoi fare lo stesso per pip:alias pip='pip3.6'
stephen

@ surfer190 che causerà problemi quando si esegue con sudo, non è vero?
Santosh Kumar,

142

Puoi risolverlo tramite link simbolico.

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

25
Questa è la risposta corretta (gli alias sono belli ma accessibili solo da bash, che limita da dove è possibile chiamare). Tuttavia, utilizzerei unlinkinvece di rmrimuovere i collegamenti simbolici (se aggiungi accidentalmente una barra finale rmpotresti avere dei risultati negativi). In alternativa, potresti fare ciò ln -s -f ...che dovrebbe sovrascrivere il collegamento simbolico corrente.
Chad Befus,

2
@ChadBefus Grazie per la tua risposta. Sono d'accordo con la tua opinione. unlink è più sicuro di rm.
Shin Kim,

3
Ha delle conseguenze per gli script che si aspettano pythondi essere python2.7?
Anton Tarasenko,

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

4
@MarksCode tenta di eseguire solo la seconda riga originale (ovvero ln -s... con /local/ ).
EliadL,

42

Apri il file ~ / .bash_profile .

vi ~/.bash_profile

Quindi inserisci l'alias come segue:

alias python='python3'

Ora salva il file ed esegui il file ~ / .bash_profile .

source ~/.bash_profile

Congratulazioni !!! Ora puoi usare python3 digitando python .

python --version

Python 3.7.3


Se hai scoperto che ho fatto lo stesso problema per pip (ovvero pip --version è ancora 2.7.x), dovrai fare gli stessi passaggi per pip3. vi ~ / .bash_profile, alias pip = 'pip3', fonte ~ / .bash_profile, pip --version
SnellyBigoda

Devo davvero source ~/.bash_profileogni volta che ho riaperto il mio terminale? Torna a python2 una volta chiuso e riapro il terminale.
Ricky Aguilar,

21

Vai al tipo di terminale:

alias python=python3.x

Questo imposterà Python predefinito come python3.x


1
Questo ha funzionato per me ma usando "alias python = python3"
Discant

Questo imposterà temporaneamente la versione di Python per quell'istanza del terminale.
Ashwin R,

12

Quanto segue ha funzionato per me

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

10

Sono un po 'in ritardo al gioco su questo, ma ho pensato di pubblicare una risposta aggiornata poiché ho riscontrato questo problema da solo. Si noti che questo si applica solo a un'installazione basata su Mac (non l'ho provato con Windows o qualsiasi versione di Linux).

Il modo più semplice per farlo funzionare è installare Python tramite Brew . Se non hai installato brew, dovrai prima farlo. Una volta installato, eseguire le seguenti operazioni sul terminale:

brew install python

Questo installerà Python 3. Una volta installato, esegui questo:

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

Vedrai tutti i collegamenti creati da brew alla sua installazione di Python. Sarà simile a questo:

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

La prima riga in questo esempio mostra il python3collegamento simbolico. Per impostarlo come pythoncollegamento simbolico predefinito, eseguire quanto segue:

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

Una volta impostato, puoi fare:

which python

e dovrebbe mostrare:

/usr/local/bin/python

Dovrai ricaricare la tua shell terminale corrente affinché utilizzi il nuovo symlink in quella shell, tuttavia, tutte le sessioni della shell appena aperte lo useranno (dovrebbero) automaticamente. Per verificare ciò, aprire una nuova shell del terminale ed eseguire quanto segue:

python --version

Funziona alla grande ( riferimento )
Nepo Znat,


8

Questo ha funzionato per me. Ho aggiunto l' alias e riavviato il mio terminale :

alias python=/usr/local/bin/python3

6

Credo che la maggior parte delle persone sbarcate qui stiano usando ZSH per tutto il mondo, e questo ti porta a questa risposta .

Devi invece aggiungere / modificare i tuoi comandi ~/.zshrc.


3

Non sono sicuro che questo sia disponibile su OS X, ma su Linux farei uso del modulecomando. Vedi qui .

Imposta correttamente il file del modulo, quindi aggiungi qualcosa del genere al tuo file rc (es. ~ / .Bashrc):

module load python3.3

Ciò consentirà di scambiare i percorsi secondo necessità quando si accede senza influire sui valori predefiniti del sistema.


3

Penso che quando installi Python inserisca le istruzioni del percorso di esportazione nel tuo file ~ / .bash_profile. Quindi, se non intendi più utilizzare Python 2, puoi semplicemente rimuovere quell'istruzione da lì. Alias ​​come detto sopra è anche un ottimo modo per farlo.

Ecco come rimuovere il riferimento da ~ / .bash_profile - vim ./.bash_profile - rimuovere il riferimento (AKA qualcosa come: export PATH = "/ Users / bla / anaconda: $ PATH") - salva ed esci - fonte ./ .bash_profile per salvare le modifiche


Non succede
co2f2e

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

fatto.



1

Se stai usando un virtualenvwrapper, puoi semplicemente localizzarlo usando which virtualenvwrapper.sh, quindi aprirlo usando vimo qualsiasi altro editor e cambiare quanto segue

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

Cambia la linea VIRTUALENVWRAPPER_PYTHON="$(command \which python)"in VIRTUALENVWRAPPER_PYTHON="$(command \which python3)".


1

Per me la soluzione stava usando PyCharm e impostando la versione predefinita di Python su quella con cui ho bisogno di lavorare.

installa PyCharm e vai al file ==> preferenze per il nuovo progetto, quindi scegli l'interprete che desideri per i tuoi progetti, in questo caso python 3.3


1

Se usi macports, non devi giocare con alias o variabili d'ambiente, usa semplicemente il metodo che macports già offre, spiegato da queste domande e risposte:

Come: Macports seleziona Python

TL; DR:

sudo port select --set python python27

1

Se stai usando macports, questo ha un modo più semplice di fare:

correre:

port install python37

dopo l'installazione, imposta il valore predefinito:

sudo port select --set python python37

sudo port select --set python3 python37

riavvia la tua finestra cmd, terminata.


1

Beh ... è un po 'vecchio. Ma merita comunque una buona risposta.

E quello buono è You Don't Wanna Touch The Default Python su Mac.

Installa qualsiasi versione di Python di cui hai bisogno tramite Homebrew o qualsiasi altra cosa e usala in virtualenv. Virtualenv è spesso considerato qualcosa di simile a una merda, ma è comunque molto, molto meglio che cambiare la versione di Python a livello di sistema (è probabile che macOS si protegga da tali azioni) o a livello di utente, a livello di bash ... qualunque cosa. Dimentica il Python predefinito. L'uso di campi da gioco come Venv è ciò per cui il tuo sistema operativo sarà più, molto grato.

Il caso è, ad esempio, che molte moderne distribuzioni Linux si liberano di Python2 installato immediatamente, lasciando solo Python3 nel sistema. Ma ogni volta che provi a installare qualcosa di vecchio con python2 come dipendenza ... spero che tu capisca cosa intendo. A un buon sviluppatore non importa. I bravi sviluppatori creano campi da gioco puliti con la versione di Python che desiderano.


0

Gli utenti Mac devono solo eseguire il seguente codice sul terminale

brew switch python 3.x.x

3.xx dovrebbe essere la nuova versione di Python.

Ciò aggiornerà tutti i collegamenti di sistema.


0

I suggerimenti per alias python su python3 causeranno problemi con ambienti virtuali che impostano la versione di python (ad esempio: pyenv). Con pyenv, puoi impostare la versione a livello globale in questo modo:

pyenv global 3.8.2

e quindi in qualsiasi progetto specifico, puoi creare un file .python-version che contiene al suo interno la versione di Python:

pyenv local 2.7.1

Questo è il modo migliore per gestire più versioni di Python su un sistema secondo me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.