¿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?



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 .


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

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


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


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

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

Funciona muy bien ( Referencia )
Nepo Znat


8

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

alias python=/usr/local/bin/python3

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.


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.


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


No sucede
co2f2e

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

hecho.



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)".


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


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

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.


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.