Wie verwende ich Brew installiertes Python als Standard-Python?

185

Ich versuche unter Mac OS X 10.6.2 zu Homebrew zu wechseln (nachdem ich Fink und Macport verwendet habe). Ich habe Python 2.7 mit installiert

brew install python 

Das Problem ist, dass es im Gegensatz zu Macport anscheinend kein Dienstprogramm python_select gibt und mein Standard-Mac-Python immer Standard ist

which python

Gib mir

/usr/bin/python

und /usr/bin/pythonist kein Symlink

Wie kann ich dafür sorgen, dass das Python-Gebräu zu meinem Standard-Python wird?

Sam
quelle
14
Homebew beschattet die Systeminstallation von Python nicht mehr. Sie können tun: export PATH="/usr/local/opt/python/libexec/bin:$PATH"Quelle: Diskurs.brew.sh/t/…
George
3
Ich habe alle genannten Antworten ausprobiert. / Usr / local / bin steht in meinem $ PATH vor / usr / bin. Ich habe versucht, die Verbindung zu brauen und die Verbindung aufzuheben. Der Brauarzt hat nicht gemeldet, dass / usr / bin vor / usr / local / bin ein Problem darstellt. Wenn ich noch welche Python mache, bekomme ich / usr / bin / python und nicht die mit Brew installierte.
Ujwal Ratra
versuchen Sie ... welche Python2
Fraser

Antworten:

117

Wenn Sie Homebrew verwenden, liefert der folgende Befehl ein besseres Bild:

brew doctor

Ausgabe:

==> / usr / bin tritt vor / usr / local / bin auf Dies bedeutet, dass vom System bereitgestellte Programme anstelle der von Homebrew bereitgestellten Programme verwendet werden. Dies ist ein Problem, wenn Sie z. Brew installierte Python.

Bearbeiten Sie Ihr .bash_profile, um Folgendes in Ihrem $ PATH vor / usr / bin vor / usr / local / bin zu setzen.

Vishal
quelle
4
Stellen Sie sicher, dass Sie nicht / user / local / bin ZWEIMAL in Ihrem Pfad haben. Aus irgendeinem Grund erschien es in meinem PFAD sowohl vor als auch nach / usr / bin und machte mich verrückt.
Vinaut
1
Viele Programme verwenden / usr / bin / python im Header, sodass dies keine praktikable Lösung ist.
Mschuett
5
für das Brauen in High Sierra ist nur python2in / usr / local / bin, für gerade python; Set export PATH="/usr/local/opt/python/libexec/bin:$PATH"in~/.bash_profile
Tormodatt
86

Siehe: Wie verknüpfe ich Python in Homebrew?

$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.3... 28 symlinks created
$ which python
/usr/local/bin/python
Akauppi
quelle
10
Warum passiert das nicht, wenn ich Python installiere?
Ben West
4
@BenWest weil python3, jetzt bekommst du python2 statt python.
Georgexsh
1
Ich habe es nicht aktiviert.
Theonlygusti
1
In meinem Fall musste ich das Terminal neu starten, nachdem ich diesen Befehl ausgeführt hatte (wie in Martijn Courteaux 'Antwort vermerkt )
jkmartindale
2
Dies verbindet Python @ 2 für mich
Andrew B.
63

Schnelle Lösung:

  1. Öffnen /etc/paths
  2. Ändern Sie die Reihenfolge der Zeilen (höchste Priorität oben)

In meinem Fall /etc/pathssieht es so aus:

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

Wenn Sie mehr über Pfade in OSX erfahren möchten, fand ich diesen Artikel sehr nützlich:

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

Bijan
quelle
1
Vielen Dank, alle oben genannten Antworten haben mein Problem gelöst, aber Sie haben es getan! Ich danke dir sehr!
Sean
7
Das Problem dabei ist, dass es für alle Benutzer geändert wird: /, IMO ist es besser, etwas Spezifischeres zu ändern.
Randall Hunt
@ RandallHunt wie was und wie?
Mike Kormendy
61

Fügen Sie dies, wie vom Homebrew-Installationsprogramm selbst vorgeschlagen, zu Ihrem .bashrcoder hinzu .zshrc:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"
Pamput
quelle
11
Dies ist die richtige Methode in High Sierra. Stimmen Sie ab!
Tormodatt
MacOS verwendet standardmäßig das zsh-Terminal. Es ist also wahrscheinlich, dass die .zshrcDatei und nicht die .bashrcDatei geändert werden muss.
user394430
1
Keine der anderen Antworten hat bei mir funktioniert, außer dieser! hier läuft macOS Catalina. Vielen Dank!
Ali Akbar
44

Ich habe "Brew Install Python" für OSX High Sierra. Das $PATHhatte /usr/local/binvor jedem anderen Weg aber nochwhich python noch auf die Python des Systems gezeigt.

Als ich genauer hinschaute, stellte ich fest, dass es keine ausführbare Python-Datei gibt /usr/local/bin. Die ausführbare Datei heißt python2. Um dieses Problem zu beheben, erstellen Sie einen symbolischen Link, der pythonauf Folgendes verweist python2:

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

Sachin Khot
quelle
4
Bestätigt, dass dies das Problem auf High Sierra
RandomDeduction
Sie sind mein Held. Ich kann nicht glauben, dass ich diese Lösung nicht realisiert habe!
Smokin Joe
3
Außerdem muss das Terminal neu
gestartet werden,
3
$ cd / usr / local / bin $ ln -s python3 python
Pnemonic
1
und ich nehme auch sym-link pip zu pip3 (oder pip2) an?
alexP_Keaton
23

Homebrew ersetzt NICHT Sachen in "/ usr / bin". Sie möchten nur "/ usr / local / bin" vor "/ usr / bin" in Ihren Pfad setzen und dann "welche Python" Ihnen "/ usr / local / bin / python" gibt.

Das Ersetzen von / usr / bin / python (oder / usr / bin / ruby) wird dringend empfohlen.

Adam Vandenberg
quelle
1
Aber das tut es nicht!
Theonlygusti
22

pythonFormel verwendet jetzt python3(v3.6.5 für jetzt), Brew wird das Verzeichnis verknüpfen :

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

es wird auch die Binärdatei verknüpfen :

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

Wenn Sie noch verwenden müssen python2.x, verwenden Sie:

brew install python@2

Um Homebrews zu verwenden python, legen Sie einfach das Verzeichnis in PATH ab, für bash:

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

für Fische:

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

Hinweis:

  1. Dadurch wird die Systemstandardversion von beschattet python
  2. Homebrew, mit dem Python /usr/local/share/pythonin älteren Versionen verknüpft wurde .
PickBoy
quelle
Das war der Trick für mich. Standardmäßig wird Brew python3in Ihrem Pfad installiert - kein Exec namens python.. Durch gezieltes Verweisen /usr/local/opt/python/libeexec/binvor anderen Verzeichnissen in meinem Pfad wurden die Probleme gelöst.
Cam8001
13

Ändern Sie Ihren $ PATH, fügen Sie diesen in Ihr bashrc oder bash_profile ein:

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

mehr hier klicken: Ausgabe # 89791

Aben
quelle
Mein Editor "PyCharm" verwendete ~ / .bashrc und ich konnte Brews Python erst mit diesem kleinen Juwel zum Laufen bringen. Danke @Aben
JamesDeHart
10

Sie müssen Ihre Umgebungsvariable PATH bearbeiten, um sicherzustellen, dass vor / usr / bin gesucht wird, wo immer sich die Homebrew-Python befindet. Sie können die Dinge auch in Ihrer Shell-Konfiguration so einrichten, dass eine Variable wie PYTHON auf die gewünschte Version von Python eingestellt wird und $PYTHONnicht über pythondie Befehlszeile aufgerufen wird.

Wie in einem anderen Poster angegeben (und insbesondere auf dem Mac), sollten Sie NICHT mit der Python in / usr / bin herumspielen, um sie auf eine andere Python-Installation zu verweisen. Sie bitten nur um Ärger, wenn Sie dies tun.

JoshAdel
quelle
9

Ich tat es brew install python, mein $PATHwar gut, which pythongab mir aber trotzdem das installierte System. Durch einen Neustart des Terminals wurde das Problem behoben.

Martijn Courteaux
quelle
1
Das ist alles was ich tun musste. Ich bin mir jedoch nicht sicher, wann ich das tun soll. Es klingt wie nur ausführen brew install pythonund dann Terminal neu starten und sonst nichts? Keine Notwendigkeit brew unlink& brew link?
Con Antonakos
Unmittelbar nach der Installation von Python mit Brew gibt "welche Python" mir den richtigen lokalen Python-Pfad, aber der Befehl "Python" zeigt an, dass das System einen aufgerufenen installiert hat. Neustart Terminal behoben.
Michelle
2
Neustart Terminal ist nicht notwendig, versuchen Siehash -r
Georgexsh
JFC, ich habe den Verstand verloren, bis ich das gelesen habe. Ich habe es schon brew unlink & brew linkmehrmals gemacht. Nur erforderlich, um das Terminal neu zu starten
Dominic
6

pythonzeigt jetzt auf python3, wenn Sie python 2dann tun müssen: brew install python@2und dann in Ihrer .zshrc- oder .bashrc-Datei export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" Now pyhon --version= Python 2.7.14 und python3 --version= Python 3.6.4. Das ist das Verhalten, das ich in meinem Terminal gewohnt bin.

Pixel 67
quelle
5

Ich glaube, es gibt Mittel, um Homebrew-Python als Standard festzulegen, aber meiner Meinung nach besteht der richtige Weg, um ein Problem zu lösen, darin, sich nicht mit System-Python-Pfaden herumzuschlagen: Es ist besser, eine virtuelle Umgebung zu erstellen, in der Homebrew-Python standardmäßig verwendet wird (mithilfe von virtualenv - -python Option). Die Verwendung von Tools wie python_selectist fast immer eine schlechte Idee.

Mikhail Korobov
quelle
1

Mach einfach:

brew install python
brew link python

Fügen Sie danach Folgendes zu Ihrem bashrc oder bash_profile hinzu:

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

Genießen!

Aaditya Prasad
quelle
Es hört sich so an, als wären Sie auf dasselbe Problem gestoßen wie ich. Alle Links, die Brew erstellt, auch mit den linkBefehlen in den Antworten hier, /usr/local/binsind für python2statt python. Die Verwendung eines Alias, um dies zu umgehen, scheint eine schlechte Idee zu sein, aber ich habe noch nichts Besseres gefunden.
Patrick M
Anstelle eines Alias ​​habe ich es einfach kopiert cp /usr/local/bin/python2 /usr/local/bin/pythonund es schien gut zu funktionieren. Ist das eine noch hässlichere Lösung?
Kingb12
1

Fügen Sie das /usr/local/opt/python/libexec/binexplizit zu Ihrem hinzu .bash_profile:

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

Danach sollte es richtig funktionieren.

Dmytro Melnychuk
quelle
1

Wenn Sie Fischschale sind

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

Verwenden Sie stattdessen pyenv, um Python zu installieren und zwischen diesen zu wechseln. Ich benutze rbenv seit Jahren, was das gleiche tut, aber für Ruby. Vorher war es die Hölle, Versionen zu verwalten.

Consult pyenv der Github Seite für Installationsanweisungen. Grundsätzlich geht es so: - Installieren Sie pyenv mit Homebrew. brew install pyenv - Fügen Sie am Ende Ihres Shell-Startskripts eine Funktion hinzu, damit pyenv seine Magie entfalten kann.echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Verwenden Sie pyenv, um so viele verschiedene Versionen von Python zu installieren, wie Sie benötigen. pyenv install 3.7.7.
  • Stellen Sie die Standardversion (global) auf eine moderne Version ein, die Sie gerade installiert haben. pyenv global 3.7.7.
  • Wenn Sie an einem Projekt arbeiten, das eine andere Version von Python verwenden muss, schauen Sie sich das an pyevn local. Dadurch wird eine Datei im Ordner Ihres Projekts erstellt, die die Python-Version angibt. Pyenv überschreibt die globale Python-Version mit der Version in dieser Datei.
mpoisot
quelle
0

Sie können / etc / path bearbeiten. Hier ist mein:

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

Fügen Sie dann einen Symlink für die Python-Version hinzu. In meinem Fall

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

Voila!

Christian Oviedo Gabarda
quelle
0

Seit High Sierra müssen Sie Folgendes verwenden:

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

Dies liegt daran, dass /usr/localnicht mehr chown werden kann

zaolian
quelle
-7

Keine Ahnung, was Sie mit Standard-Python meinen. Ich halte es für eine schlechte Praxis, den System-Python-Interpreter durch eine andere Version zu ersetzen. Die Systemfunktionalität kann in gewisser Weise vom System-Python und bestimmten Modulen oder einer bestimmten Python-Version abhängen. Installieren Sie stattdessen Ihre benutzerdefinierten Python-Installationen an einem sicheren anderen Ort und passen Sie Ihren $ PATH nach Bedarf an, um Sie über eine Pfadsuche als Python aufzurufen , anstatt nach dem Standard-Python zu suchen.

Andreas Jung
quelle
5
In OS X besteht kein Risiko, dass die Python von Homebrew vor der Python des Systems im Pfad steht. Das ist sehr häufig.
Steven Noble
3
Auch die Notwendigkeit, einen Nicht-Apple-Python zu verwenden, ist real. Ich habe versucht, matplotlib, NumPy und SciPy mit dem Standard-Python (auch bekannt als Apple) zum Laufen zu bringen. Es geht um die Behandlung von 32/64 Bits, die Erweiterungen einfach in die Luft jagen. Sehr, sehr, sehr froh, stattdessen ein schönes Gebräu zu haben. Und standardmäßig ('Brew Install Python') macht Brew genau das, was Sie meinen - es installiert den zweiten Python in einer separaten Struktur und überschreibt keine Pfade (genau deshalb stellt sich diese SO-Frage).
Akauppi