¿Cómo configurar la versión predeterminada de Python en 3.x en OS X?

329

Estoy ejecutando Mountain Lion y la versión básica predeterminada de Python es 2.7. Descargué Python 3.3 y quiero configurarlo como predeterminado.

Actualmente:

$ python
    version 2.7.5
$ python3.3
    version 3.3

¿Cómo lo configuro para que cada vez que lo ejecute $ pythonse abra 3.3?

Marcus
fuente
¿Posible duplicado de cómo cambiar la versión predeterminada de Python?
Dheeraj Vepakomma
Puede administrar la versión de python con pyenv.
Shin Kim

Respuestas:

580

Cambiar la versión predeterminada del ejecutable de Python en todo el sistema podría romper algunas aplicaciones que dependen de python2.

Sin embargo, puede asignar alias a los comandos en la mayoría de los shells, ya que los shells predeterminados en macOS (bash en 10.14 e inferior; zsh en 10.15) comparten una sintaxis similar. Puede poner alias python = 'python3' en su ~/.profile, y luego ingresar ~/.profileen su ~/.bash_profiley / o su ~/.zsh_profilecon una línea como:

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

De esta manera, tu alias funcionará en todos los shells.

Con esto, el pythoncomando ahora invoca python3. Si desea invocar el pitón "original" (que se refiere a python2 ) en ocasiones, puede usarlo command python, lo que dejará el alias intacto y funcionará en todos los shells.

Si inicia intérpretes con más frecuencia (lo hago) , siempre puede crear más alias para agregar también, es decir:

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

Consejo: para secuencias de comandos, en lugar de usar un shebang como:

#!/usr/bin/env python

utilizar:

#!/usr/bin/env python3

De esta manera, el sistema usará python3 para ejecutar ejecutables de python .

Santosh Kumar
fuente
2
¿No debería ponerse esto en ~ / .bash_profile en lugar de ~ / .bash_aliases?
UnsettlingTrend
44
Poner alias python=python3y luego ejecutar pythonen mi terminal en osx el capitan no funcionó para mí. Intenté guardarlo tanto ~ / .bash_aliases como ~ / .bash_profile.
Haymaker87
43
@ Haymaker87 se ejecuta source ~/.bash_profiledespués de editar el ~/.bash_profilearchivo.
Wei Lu
15
Puede hacer lo mismo para pip:alias pip='pip3.6'
Stephen
@ surfer190 que causará problemas al ejecutar con sudo, ¿no?
Santosh Kumar
142

Puedes resolverlo por enlace simbólico.

unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python
Shin Kim
fuente
25
Esta es la respuesta correcta (los alias son agradables pero solo accesibles por bash, lo que limita desde dónde puede llamar). Sin embargo, usaría en unlinklugar de rmeliminar enlaces simbólicos (si agrega accidentalmente una barra inclinada final rmpodría tener algunos malos resultados). Alternativamente, podría hacer lo ln -s -f ...que debería sobrescribir el enlace simbólico actual.
Chad Befus
2
@ChadBefus Gracias por su respuesta. Estoy de acuerdo con tu opinión. desvincular es más seguro que rm.
Shin Kim
3
¿Tiene alguna consecuencia para los scripts que esperan pythonser python2.7?
Anton Tarasenko
19
macOS:unlink: /usr/bin/python: Operation not permitted
MarksCode
44
@MarksCode intenta ejecutar la segunda línea original (es decir, ln -s... con /local/ ).
EliadL
42

Abra el archivo ~ / .bash_profile .

vi ~/.bash_profile

Luego ponga el alias de la siguiente manera:

alias python='python3'

Ahora guarde el archivo y luego ejecute el archivo ~ / .bash_profile .

source ~/.bash_profile

Felicidades !!! Ahora, puede usar python3 escribiendo python .

python --version

Python 3.7.3

Ananta Chandra Das
fuente
Si descubrió como yo que el mismo problema se aplica a pip (es decir, la versión de pip sigue siendo 2.7.x), entonces deberá seguir los mismos pasos para pip3. vi ~ / .bash_profile, alias pip = 'pip3', fuente ~ / .bash_profile, pip --version
SnellyBigoda
¿Realmente necesito source ~/.bash_profilecada vez que vuelva a abrir mi terminal? Vuelve a python2 una vez que cierro y abro la terminal nuevamente.
Ricky Aguilar
21

Ir al tipo de terminal:

alias python=python3.x

Esto configurará python predeterminado como python3.x

Aditya
fuente
1
Esto funcionó para mí pero usando "alias python = python3"
Discant
Esto establecerá temporalmente la versión de Python para esa instancia de terminal.
Ashwin R
12

Lo siguiente funcionó para mí

cd /usr/local/bin
mv python python.old
ln -s python3 python
Mayank Jain
fuente
10

Llegué un poco tarde al juego en este caso, pero pensé que debería publicar una respuesta actualizada ya que me encontré con este problema. Tenga en cuenta que esto solo se aplicará a una configuración basada en Mac (no lo he probado con Windows o cualquier versión de Linux).

La forma más sencilla de hacer que esto funcione es instalar Python a través de Brew . Si no tiene brew instalado, primero deberá hacerlo. Una vez instalado, haga lo siguiente en la terminal:

brew install python

Esto instalará Python 3. Después de que esté instalado, ejecute esto:

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

Verá todos los enlaces creados por brew para su instalación de Python. Se verá algo como esto:

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 primera fila en este ejemplo muestra el python3enlace simbólico. Para configurarlo como el pythonenlace simbólico predeterminado, ejecute lo siguiente:

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

Una vez configurado, puedes hacer:

which python

y debería mostrar:

/usr/local/bin/python

Tendrá que volver a cargar su terminal de terminal actual para que pueda usar el nuevo enlace simbólico en ese shell, sin embargo, todas las sesiones de shell recién abiertas lo (deberían) usar automáticamente. Para probar esto, abra un nuevo terminal y ejecute lo siguiente:

python --version
noche
fuente
Funciona muy bien ( Referencia )
Nepo Znat
9

Vaya a 'Aplicaciones', ingrese a la carpeta 'Python', debería haber un script bash llamado 'Update Shell Profile.command' o similar. Ejecute ese script y debería hacerlo.

Actualización: Parece que no deberías actualizarla: ¿cómo cambiar la versión predeterminada de Python?

CT Zhu
fuente
8

Esto funcionó para mí. Agregué alias y reinicié mi terminal :

alias python=/usr/local/bin/python3
toadead
fuente
6

Creo que la mayoría de las personas que llegaron aquí están usando ZSH a través de iterm o lo que sea, y eso te lleva a esta respuesta .

En su lugar, debe agregar / modificar sus comandos ~/.zshrc.

Mr Crowley
fuente
3

No estoy seguro de si esto está disponible en OS X, pero en Linux haría uso del modulecomando. Vea aquí .

Configure el archivo de módulo correctamente, luego agregue algo como esto a su archivo rc (por ejemplo, ~ / .bashrc):

module load python3.3

Esto hará que sus rutas se cambien según sea necesario cuando inicie sesión sin afectar los valores predeterminados del sistema.

Vorticidad
fuente
3

Creo que cuando instala Python, coloca las instrucciones de ruta de exportación en su archivo ~ / .bash_profile. Entonces, si ya no tiene intención de usar Python 2, simplemente puede eliminar esa declaración desde allí. El alias como se indicó anteriormente también es una excelente manera de hacerlo.

Aquí se explica cómo eliminar la referencia de ~ / .bash_profile - vim ./.bash_profile - eliminar la referencia (también conocida como: export PATH = "/ Users / bla / anaconda: $ PATH") - guardar y salir - source ./ .bash_profile para guardar los cambios

doubleOK
fuente
No sucede
co2f2e
3
$ sudo ln -s -f $(which python3) $(which python)

hecho.

oori
fuente
1

Si está utilizando un virtualenvwrapper, puede localizarlo usando which virtualenvwrapper.sh, luego abrirlo usando vimo cualquier otro editor y luego cambiar lo siguiente

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

Cambia la línea VIRTUALENVWRAPPER_PYTHON="$(command \which python)"a VIRTUALENVWRAPPER_PYTHON="$(command \which python3)".

Reyes esir
fuente
1

Para mí, la solución fue usar PyCharm y configurar la versión predeterminada de Python a la que necesito para trabajar.

instale PyCharm y vaya al archivo ==> preferencias para el nuevo proyecto, luego elija el intérprete que desea para sus proyectos, en este caso python 3.3

Chama
fuente
1

Si usa macports, no necesita jugar con alias o variables de entorno, solo use el método que ya ofrece macports, explicado en estas preguntas y respuestas:

Cómo: Macports selecciona Python

TL; DR:

sudo port select --set python python27
alanwaring
fuente
1

Si está utilizando macports, esa es una manera más fácil de hacer:

correr:

port install python37

después de la instalación, establezca el valor predeterminado:

sudo port select --set python python37

sudo port select --set python3 python37

reinicie su ventana de cmd, terminado.

Clark So
fuente
1

Bueno ... es un poco viejo. Pero aún merece una buena respuesta.

Y lo bueno es que no quieres tocar el Python predeterminado en Mac.

Instale cualquier versión de Python que necesite a través de Homebrew o lo que sea y úsela en virtualenv. Virtualenv a menudo se considera como una basura, pero sigue siendo mucho mejor que cambiar la versión de Python en todo el sistema (es probable que macOS se proteja de tales acciones) o en todo el usuario, en todo el bash ... lo que sea. Solo olvídate del Python predeterminado. El uso de parques infantiles como venv es lo que su sistema operativo estará más agradecido.

El caso es, por ejemplo, que muchas distribuciones modernas de Linux eliminan Python2 instalado de fábrica, dejando solo Python3 en el sistema. Pero cada vez que intentas instalar algo viejo con python2 como dependencia ... espero que entiendas lo que quiero decir. A un buen desarrollador no le importa. Los buenos desarrolladores crean parques infantiles limpios con la versión de Python que desean.

Tor_Gash
fuente
0

Los usuarios de Mac solo necesitan ejecutar el siguiente código en la terminal

brew switch python 3.x.x

3.xx debería ser la nueva versión de Python.

Esto actualizará todos los enlaces del sistema.

Dilshan
fuente
0

Las sugerencias de alias python a python3 causarán problemas con los entornos virtuales que configuran la versión de python (por ejemplo: pyenv). Con pyenv, puede configurar la versión globalmente de esta manera:

pyenv global 3.8.2

y luego, en cualquier proyecto específico, puede crear un archivo de versión .python que tenga la versión de python dentro de él:

pyenv local 2.7.1

En mi opinión, esta es la mejor manera de administrar múltiples versiones de Python en un sistema.

jacob
fuente