Comment utiliser le Python installé par brew comme Python par défaut?


188

J'essaye de passer à Homebrew (après avoir utilisé fink et macport) sur Mac OS X 10.6.2. J'ai installé python 2.7 avec

brew install python 

Le problème est que, contrairement à Macport, il semble qu'il n'y ait pas d'utilitaire python_select, et mon mac python par défaut est toujours par défaut

which python

Donnez-moi

/usr/bin/python

et /usr/bin/pythonn'est pas un lien symbolique

Comment puis-je faire pour que la saveur python brew soit mon python par défaut?


14
Homebew n'observe plus l'installation système de python. Vous pouvez faire: export PATH="/usr/local/opt/python/libexec/bin:$PATH"source: discourse.brew.sh/t/…
George

3
J'ai essayé toutes les réponses mentionnées, / usr / local / bin vient avant / usr / bin dans mon $ PATH. J'ai essayé le lien de brassage et la dissociation, le docteur de brassage n'a pas signalé le problème / usr / bin avant / usr / local / bin. Toujours quand je fais quel python, j'obtiens / usr / bin / python et non celui installé avec brew.
Ujwal Ratra

essayez ... quel python2
Fraser

Réponses:


118

Lorsque vous utilisez Homebrew, la commande suivante donne une meilleure image:

brew doctor

Production:

==> / usr / bin se produit avant / usr / local / bin Cela signifie que les programmes fournis par le système seront utilisés à la place de ceux fournis par Homebrew. C'est un problème si vous par exemple. brew a installé Python.

Pensez à modifier votre .bash_profile pour placer: / usr / local / bin avant / usr / bin dans votre $ PATH.


4
Assurez-vous que vous n'avez pas / user / local / bin TWICE dans votre chemin. Pour une raison quelconque dans mon PATH, il est apparu à la fois avant et après / usr / bin et cela me rendait fou.
vinaut

1
de nombreux programmes utilisent / usr / bin / python dans l'en-tête, ce qui n'est pas une solution viable.
mschuett

5
pour brew dans High Sierra seulement python2est dans / usr / local / bin, pour juste python; set export PATH="/usr/local/opt/python/libexec/bin:$PATH"in~/.bash_profile
tormodatt

86

Voir: Comment créer un lien symbolique python dans Homebrew?

$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.3... 28 symlinks created
$ which python
/usr/local/bin/python

11
pourquoi cela ne se produit-il pas lorsque j'installe python?
Ben West

4
@BenWest parce que python3, maintenant vous obtenez python2 plutôt que python.
georgexsh le

1
Je ne l'ai pas activé.
theonlygusti

1
Dans mon cas, j'avais besoin de redémarrer le terminal après avoir exécuté cette commande (comme indiqué par la réponse de Martijn Courteaux )
jkmartindale

2
ce lien python @ 2 pour moi
Andrew B.

63

Solution rapide:

  1. Ouvert /etc/paths
  2. Changer l'ordre des lignes (priorité la plus élevée en haut)

Dans mon cas /etc/pathsressemble à:

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

Si vous voulez en savoir plus sur les chemins dans OSX, j'ai trouvé cet article très utile:

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


1
Merci, toutes les réponses ci-dessus ont résolu mon problème, mais vous l'avez fait! Merci beaucoup!
Sean

7
le problème avec ceci est que cela change pour tous les utilisateurs: /, IMO, il vaut mieux changer quelque chose de plus spécifique.
Randall Hunt

@RandallHunt comme quoi et comment?
Mike Kormendy le

63

Comme suggéré par le programme d'installation homebrew lui-même, assurez-vous d'ajouter ceci à votre .bashrcou .zshrc:

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

11
C'est la bonne méthode sur High Sierra. Votez!
tormodatt le

MacOS utilise par défaut le terminal zsh, il est donc probable que ce soit le .zshrcfichier et non le .bashrcfichier qui doit changer.
user394430

1
Aucune des autres réponses n'a fonctionné pour moi sauf cela! exécutez macOS Catalina ici. Merci!
Ali Akbar

C'est la bonne réponse
HarshMarshmallow

44

J'ai fait "brew install python" pour OSX High Sierra. Le $PATHavait /usr/local/binavant tout autre chemin mais which pythonpointait toujours vers le python du système.

Quand j'ai regardé plus en profondeur, j'ai trouvé qu'il n'y avait pas d'exécutable python /usr/local/bin. L'exécutable est nommé python2. Pour résoudre ce problème, créez un lien symbolique pythonpointant vers python2:

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


4
Confirmé que cela corrige le problème sur High Sierra
RandomDeduction

Tu es mon héros. Je n'arrive pas à croire que je n'ai pas réalisé cette solution!
Smokin Joe

3
Il faut également redémarrer le terminal pour postuler
lexa-b

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

1
et je suppose également pip lien symbolique vers pip3 (ou pip2)?
alexP_Keaton

23

Homebrew ne remplace PAS les éléments de "/ usr / bin". Vous voudrez juste mettre "/ usr / local / bin" avant "/ usr / bin" dans votre chemin, puis "quel python" vous donnera "/ usr / local / bin / python".

Le remplacement de / usr / bin / python (ou / usr / bin / ruby) est fortement déconseillé.


2
Mais ce n'est pas le cas!
theonlygusti

22

pythonla formule utilise maintenant python3(v3.6.5 pour le moment), brew liera le répertoire :

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

il liera également le binaire :

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

Si vous devez encore utiliser python2.x, utilisez:

brew install python@2

Pour utiliser les homebrews python, mettez simplement son répertoire dans PATH, pour bash:

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

pour le poisson:

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

Remarque:

  1. faire cela va masquer la version par défaut du système de python
  2. homebrew utilisé pour lier python /usr/local/share/pythondans les anciennes versions.

C'était le truc pour moi. Par défaut, brew s'installe python3dans votre chemin - pas un exécutable appelé python.. Spécifiquement référencer /usr/local/opt/python/libeexec/binavant d'autres répertoires dans mon chemin a trié les choses.
cam8001

13

Modifiez votre $ PATH, ajoutez ceci dans votre bashrc ou bash_profile:

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

plus cliquez ici: Issue # 89791


Mon éditeur "PyCharm" utilisait ~ / .bashrc et je n'ai pas pu faire fonctionner le python de brew jusqu'à ce petit bijou. Merci @Aben
JamesDeHart

10

Vous devez éditer votre variable d'environnement PATH pour vous assurer que l'endroit où se trouve le homebrew python est recherché avant / usr / bin. Vous pouvez également configurer les éléments dans votre configuration de shell pour qu'une variable telle que PYTHON soit définie sur la version souhaitée de python et appelée $PYTHONplutôt qu'à pythonpartir de la ligne de commande.

De plus, comme l'a déclaré un autre poster (et en particulier sur mac), NE PAS jouer avec le python dans / usr / bin pour le pointer vers une autre installation de python. Vous demandez simplement des ennuis si vous le faites.


9

Je l'ai fait brew install python, $PATHc'était bon, mais encore, which pythonm'a donné le système installé. Le redémarrage du terminal l'a corrigé.


1
C'est tout ce que j'avais à faire. Je ne sais pas quand faire cela, cependant. Cela ressemble à simplement exécuter brew install python, puis redémarrer le terminal, et rien d'autre? Pas besoin de brew unlink& brew link?
Con Antonakos

Juste après l'installation de python à l'aide de brew, "which python" me donne le bon chemin local de python, mais la commande "python" a indiqué que c'était le système installé qui invoquait. Le terminal de redémarrage l'a corrigé.
Michelle

2
redémarrer le terminal n'est pas nécessaire, essayezhash -r
georgexsh

JFC, je perdais la tête jusqu'à ce que je lise ceci. Je l'ai déjà fait brew unlink & brew linkplusieurs fois. Seulement nécessaire pour redémarrer le terminal
Dominic

6

pythonpointe maintenant vers python3, si vous avez besoin, python 2faites alors: brew install python@2et puis dans votre fichier .zshrc ou .bashrc export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" Maintenant, pyhon --version= Python 2.7.14 et python3 --version= Python 3.6.4. C'est le comportement que j'ai l'habitude de voir dans mon terminal.


5

Je pense qu'il existe des moyens de rendre python homebrew par défaut, mais à mon avis, la bonne façon de résoudre un problème est de ne pas jouer avec les chemins python système: il est préférable de créer un virtualenv dans lequel python homebrew serait par défaut (en utilisant virtualenv - option -python). Utiliser des outils comme python_selectc'est presque toujours une mauvaise idée.


2

Utilisez plutôt pyenv pour installer et basculer entre les versions de Python. J'utilise rbenv depuis des années, ce qui fait la même chose, mais pour Ruby. Avant cela, c'était l'enfer de gérer les versions.

Consultez la page github de pyenv pour les instructions d'installation. En gros, cela va comme ceci: - Installez pyenv en utilisant homebrew. brew install pyenv - Ajoutez une fonction à la fin de votre script de démarrage shell pour que pyenv puisse faire la magie.echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Utilisez pyenv pour installer le nombre de versions différentes de Python dont vous avez besoin. pyenv install 3.7.7.
  • Définissez la version par défaut (globale) sur une version moderne que vous venez d'installer. pyenv global 3.7.7.
  • Si vous travaillez sur un projet qui doit utiliser une version différente de python, regardez dans pyevn local. Cela crée un fichier dans le dossier de votre projet qui spécifie la version python. Pyenv cherchera à remplacer la version globale de python par la version de ce fichier.

1

Faites simplement:

brew install python
brew link python

Après cela, ajoutez ceci à votre bashrc ou bash_profile:

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

Prendre plaisir!


Il semble que vous ayez rencontré le même problème que moi. Tous les liens que le brassage crée, même avec les linkcommandes dans les réponses ici, /usr/local/binsont pour python2au lieu de python. Utiliser un alias pour contourner ce problème semble être une mauvaise idée, mais je n'ai encore rien trouvé de mieux.
Patrick M

Plutôt que d'alias, je l'ai simplement copié cp /usr/local/bin/python2 /usr/local/bin/pythonet cela a semblé bien fonctionner. Est-ce une solution de contournement encore plus moche?
kingb12

1

Ajoutez /usr/local/opt/python/libexec/binexplicitement le à votre .bash_profile:

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

Après cela, cela devrait fonctionner correctement.


1

Si vous êtes une coquille de poisson

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

0

Vous pouvez modifier / etc / chemins. Voici le mien:

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

Ajoutez ensuite un lien symbolique pour la version python. Dans mon cas

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

Voila!


0

Depuis High Sierra, vous devez utiliser:

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

C'est parce que /usr/localne peut plus être choppé


-7

Aucune idée de ce que vous voulez dire avec Python par défaut. Je considère que c'est une mauvaise pratique de remplacer l'interpréteur système Python par une version différente. La fonctionnalité du système peut dépendre d'une certaine manière du système Python et de modules spécifiques ou d'une version spécifique de Python. Au lieu de cela, installez vos installations Python personnalisées dans un autre endroit sûr et ajustez votre $ PATH selon vos besoins afin de vous appeler Python via une recherche de chemin au lieu de rechercher le Python par défaut.


5
il n'y a aucun risque dans os x que le python de homebrew vienne avant le python du système dans le chemin. Ceci est très courant.
Steven Noble

3
De plus, le besoin d'utiliser un Python non Apple est réel. J'ai essayé de faire fonctionner matplotlib, NumPy et SciPy avec le Python `` par défaut '' (aka Apple). C'est quelque chose à propos de son traitement de 32/64 bits qui fait simplement exploser les extensions. Très, très, très heureux d'avoir un bon Brew à la place. Et par défaut ('brew install python'), Brew fait exactement ce que vous voulez dire - il installe le deuxième Python dans une structure séparée, sans surcharger les chemins (c'est précisément pourquoi cette question SO se pose).
akauppi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.