¿Cómo uso Brew Python instalado como Python predeterminado?

188

Intento cambiar a Homebrew (después de usar Fink y Macport) en Mac OS X 10.6.2. He instalado Python 2.7 con

brew install python 

El problema es que, a diferencia de Macport, parece que no hay una utilidad python_select, y mi mac python predeterminada siempre es predeterminada

which python

Dame

/usr/bin/python

y /usr/bin/pythonno es un enlace simbólico

¿Cómo puedo hacer para que Python Brew Sabor sea mi Python predeterminado?

sam
fuente
14
Homebew ya no oculta la instalación del sistema de Python. Puede hacer: export PATH="/usr/local/opt/python/libexec/bin:$PATH"fuente: discurso.brew.sh/t/…
George
3
Intenté todas las respuestas mencionadas, / usr / local / bin viene antes / usr / bin en mi $ PATH. Intenté brew link and unlink, brew doctor no informó que / usr / bin estuviera antes de / usr / local / bin un problema. Aún cuando hago qué python, obtengo / usr / bin / python y no el que está instalado con brew.
Ujwal Ratra
prueba ... que python2
Fraser

Respuestas:

118

Mientras usa Homebrew, el siguiente comando ofrece una mejor imagen:

brew doctor

Salida:

==> / usr / bin ocurre antes de / usr / local / bin Esto significa que se utilizarán los programas proporcionados por el sistema en lugar de los proporcionados por Homebrew. Este es un problema si usted, por ejemplo. preparar Python instalado.

Considere editar su .bash_profile para poner: / usr / local / bin delante de / usr / bin en su $ PATH.

Vishal
fuente
44
Asegúrese de no tener / user / local / bin TWICE en su ruta. Por alguna razón en mi RUTA apareció antes y después de / usr / bin y me estaba volviendo loco.
vinaut
1
muchos programas usan / usr / bin / python en el encabezado, por lo que esta no es una solución viable.
mschuett
55
la cerveza en High Sierra solo python2está en / usr / local / bin, por solo python; conjunto export PATH="/usr/local/opt/python/libexec/bin:$PATH"en~/.bash_profile
tormodatt
86

Ver: ¿Cómo vincular python en Homebrew?

$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.3... 28 symlinks created
$ which python
/usr/local/bin/python
akauppi
fuente
11
¿Por qué no sucede esto cuando preparo instalar Python?
Ben West
44
@BenWest porque python3, ahora obtienes python2 en lugar de python.
georgexsh
1
No lo tengo habilitado.
theonlygusti
1
En mi caso, necesitaba reiniciar el terminal después de ejecutar este comando (como lo señala la respuesta de Martijn Courteaux )
jkmartindale
2
esto vincula python @ 2 para mí
Andrew B.
63

Arreglo rapido:

  1. Abierto /etc/paths
  2. Cambiar el orden de las líneas (máxima prioridad en la parte superior)

En mi caso se /etc/pathsve así:

/usr/local/bin
/usr/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin

Si quieres saber más sobre las rutas en OSX, encontré este artículo bastante útil:

http://muttsnutts.github.com/blog/2011/09/12/manage-path-on-mac-os-x-lion/

Bijan
fuente
1
Gracias, todas las respuestas anteriores resolvieron mi problema, ¡pero tu sí! Muchas gracias!
Sean
77
El problema con esto es que lo cambia para todos los usuarios: /, en mi opinión, es mejor cambiar algo más específico.
Randall Hunt
@RandallHunt, ¿qué y cómo?
Mike Kormendy
63

Según lo sugerido por el instalador de homebrew, asegúrese de agregar esto a su .bashrco .zshrc:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"
Pamput
fuente
11
Este es el método correcto en High Sierra. ¡Vota arriba!
tormodatt
MacOS usa de manera predeterminada el terminal zsh, por lo que es probable que sea el .zshrcarchivo y no el .bashrcarchivo el que deba cambiar.
user394430
1
¡Ninguna de las otras respuestas funcionó para mí excepto esto! ejecutando macOS Catalina aquí. ¡Gracias!
Ali Akbar
Esta es la respuesta correcta
HarshMarshmallow
44

Hice "brew install python" para OSX High Sierra. La $PATHtenía /usr/local/binantes que cualquier otra ruta pero todavía which pythonapuntaba a la pitón del sistema.

Cuando miré más profundo, descubrí que no hay ningún ejecutable de Python en /usr/local/bin. El ejecutable se llama python2. Para solucionar este problema, cree un enlace simbólico que pythonapunte a python2:

/usr/local/bin $: ln -s python2 python

Sachin Khot
fuente
44
Confirmado, esto soluciona el problema en High Sierra
RandomDeduction
Eres mi héroe. ¡No puedo creer que no me haya dado cuenta de esta solución!
Smokin Joe
3
También es necesario reiniciar el terminal para aplicar
lexa-b
3
$ cd / usr / local / bin $ ln -s python3 python
Pnemonic
1
y supongo también sym-link pip a pip3 (o pip2)?
alexP_Keaton
23

Homebrew NO reemplaza cosas en "/ usr / bin". Simplemente querrás poner "/ usr / local / bin" delante de "/ usr / bin" en tu ruta, luego "which python" te dará "/ usr / local / bin / python".

Reemplazar / usr / bin / python (o / usr / bin / ruby) es muy poco recomendable.

Adam Vandenberg
fuente
2
Pero no lo hace!
theonlygusti
22

pythonla fórmula ahora usa python3(v3.6.5 por ahora), brew vinculará el directorio :

/usr/local/opt/python -> ../Cellar/python/3.6.5

También vinculará el binario :

/usr/local/bin/python3 -> ../Cellar/python/3.6.5/bin/python3

Si aún necesita usar python2.x, use:

brew install python@2

Para usar homebrew's python, solo ponga su directorio en PATH, para bash:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"

para peces:

set -x PATH /usr/local/opt/python/libexec/bin $PATH

Nota:

  1. al hacer esto, se sombreará la versión predeterminada del sistema de python
  2. homebrew solía vincular python a /usr/local/share/pythonversiones anteriores.
PickBoy
fuente
Este fue el truco para mí. De manera predeterminada, brew instala python3en su ruta, no un ejecutivo llamado python... Específicamente, haciendo referencia a /usr/local/opt/python/libeexec/binotros directorios en mi ruta resolvió las cosas.
cam8001
13

Modifique su $ PATH, agregue esto en su bashrc o bash_profile:

export PATH=/usr/local/bin:/usr/local/sbin:~/bin:$PATH

más haga clic aquí: Número 89791

Aben
fuente
Mi editor "PyCharm" estaba usando ~ / .bashrc y no pude hacer funcionar la pitón de Brew hasta esta pequeña joya. Gracias @Aben
JamesDeHart
10

Debe editar su variable de entorno PATH para asegurarse de que donde se encuentre el pitón homebrew se busque antes de / usr / bin. También puede configurar las cosas en su configuración de shell para que una variable como PYTHON se configure en su versión deseada de python y llame en $PYTHONlugar de pythondesde la línea de comandos.

Además, como se indicó en otro póster (y especialmente en Mac) NO se meta con el python en / usr / bin para apuntarlo a otra instalación de python. Solo estás pidiendo problemas si lo haces.

JoshAdel
fuente
9

Lo hice brew install python, $PATHfue bueno, pero aún así, which pythonme dio el sistema instalado. Reiniciar el terminal lo arregló.

Martijn Courteaux
fuente
1
Esto es todo lo que necesitaba hacer. Sin embargo, no estoy seguro de cuándo hacer esto. Suena como simplemente ejecutar brew install pythony luego, reiniciar el terminal, ¿y nada más? No hay necesidad de brew unlink& brew link?
Con Antonakos
Justo después de instalar python usando brew, "qué python" me dio la ruta de acceso local correcta a python, pero el comando "python" indicó que era el sistema que se invocaba. Reiniciar terminal lo arregló.
Michelle
2
reiniciar terminal no es necesario, intentehash -r
georgexsh
JFC, estaba perdiendo la cabeza hasta que leí esto. Ya lo hice brew unlink & brew linkvarias veces. Solo necesitaba reiniciar la terminal
Dominic
6

pythonahora apunta a python3, si lo necesita, python 2entonces haga: brew install python@2y luego en su archivo .zshrc o .bashrc export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" Ahora, pyhon --version= Python 2.7.14 y python3 --version= Python 3.6.4. Ese es el comportamiento que estoy acostumbrado a ver en mi terminal.

pixel 67
fuente
5

Creo que hay medios para hacer que Python homebrew sea predeterminado, pero en mi opinión, la forma correcta de resolver un problema es no meterse con las rutas de Python del sistema: es mejor crear un virtualenv en el que el Python homebrew sea predeterminado (usando virtualenv - -python opción). Usar herramientas como python_selectcasi siempre es una mala idea.

Mikhail Korobov
fuente
2

Use pyenv en su lugar para instalar y cambiar entre versiones de Python. He estado usando rbenv durante años, lo que hace lo mismo, pero para Ruby. Antes de eso, era un infierno manejar versiones.

Consulte la página de github de pyenv para obtener instrucciones de instalación. Básicamente es así: - Instale pyenv usando homebrew. brew install pyenv - Agregue una función al final de su script de inicio de shell para que pyenv pueda hacer su magia.echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Use pyenv para instalar las diferentes versiones de Python que necesite. pyenv install 3.7.7.
  • Establezca la versión predeterminada (global) en una versión moderna que acaba de instalar. pyenv global 3.7.7.
  • Si trabaja en un proyecto que necesita usar una versión diferente de python, investigue pyevn local. Esto crea un archivo en la carpeta de su proyecto que especifica la versión de Python. Pyenv buscará anular la versión global de Python con la versión en ese archivo.
mpoisot
fuente
1

Solo haz:

brew install python
brew link python

Después de hacer eso, agregue esto a su bashrc o bash_profile:

alias python='/usr/local/bin/python2'

¡Disfrutar!

Aaditya Prasad
fuente
Parece que te encontraste con el mismo problema que yo. Todos los enlaces que se crean, incluso con los linkcomandos en las respuestas aquí, /usr/local/binson para en python2lugar de python. Usar un alias para solucionar esto parece una mala idea, pero aún no he encontrado nada mejor.
Patrick M
En lugar de alias, simplemente lo copié cp /usr/local/bin/python2 /usr/local/bin/pythony pareció funcionar bien. ¿Es esta una solución aún más fea?
kingb12
1

Agregue /usr/local/opt/python/libexec/binexplícitamente a su .bash_profile:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"

Después de eso, debería funcionar correctamente.

Dmytro Melnychuk
fuente
1

Si eres concha de pescado

echo 'set -g fish_user_paths "/usr/local/opt/python/libexec/bin" $fish_user_paths' >> ~/.config/fish/config.fish
KelaKing
fuente
0

Puede editar / etc / caminos. Aquí esta el mio:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

Luego agregue un enlace simbólico para la versión de Python. En mi caso

$ cd /usr/local/bin
$ ln -s python3 python

Voila!

Christian Oviedo Gabarda
fuente
0

Desde High Sierra, debe usar:

sudo chown -R $(whoami) $(brew --prefix)/*

Esto se debe a /usr/localque ya no se puede comer

zaolian
fuente
-7

No tengo idea de lo que quieres decir con Python predeterminado. Considero que es una mala práctica reemplazar el intérprete de Python del sistema con una versión diferente. La funcionalidad del sistema puede depender de alguna manera del sistema Python y los módulos específicos o una versión específica de Python. En lugar de instalar sus instalaciones a medida Python en un lugar seguro diferente y ajustar su $ PATH, según sea necesario con el fin de llamar a que Python a través de un camino de búsqueda en lugar de buscar el pitón por defecto.

Andreas Jung
fuente
55
no hay riesgo en os x de que la pitón de homebrew aparezca antes que la pitón del sistema en la ruta. Esto es muy comun.
Steven Noble el
3
Además, la necesidad de usar un Python que no sea Apple es real. He estado tratando de poner en funcionamiento matplotlib, NumPy y SciPy con el Python 'predeterminado' (también conocido como Apple). Es algo sobre su tratamiento de 32/64 bits que simplemente destruye las extensiones. Muy, muy, muy contento de tener una buena cerveza en su lugar. Y de manera predeterminada ('brew install python') Brew hace exactamente lo que quiere decir: instala el segundo Python en una estructura separada, no anula las rutas (que es precisamente por eso que surge esta pregunta SO).
akauppi 01 de