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?


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.


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

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/


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"

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


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.


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 .

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


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.


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.


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.


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.


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!


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.


1

Wenn Sie Fischschale sind

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

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.

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!


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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.