Jak używać domyślnie zainstalowanego Pythona?

188

Próbuję przejść do Homebrew (po użyciu fink i macport) w systemie Mac OS X 10.6.2. Zainstalowałem Python 2.7 z

brew install python 

Problem polega na tym, że w przeciwieństwie do Macport, wydaje się, że nie ma narzędzia python_select, a mój domyślny python dla Mac jest zawsze domyślny

which python

daj mi

/usr/bin/python

i /usr/bin/pythonnie jest dowiązaniem symbolicznym

Jak mogę zrobić, aby smak napoju Python był moim domyślnym pythonem?

sam
źródło
14
Homebew nie przesłania już systemowej instalacji Pythona. Możesz zrobić: export PATH="/usr/local/opt/python/libexec/bin:$PATH"źródło: discourse.brew.sh/t/…
George
3
Próbowałem wszystkich wymienionych odpowiedzi, / usr / local / bin pojawia się przed / usr / bin w mojej $ PATH. Próbowałem zaparzania linku i rozłączania, brew doctor nie zgłosił, że / usr / bin jest przed / usr / local / bin problemem. Mimo to, kiedy robię, który python, otrzymuję / usr / bin / python, a nie ten zainstalowany z brew.
Ujwal Ratra
spróbuj ... które python2
Fraser

Odpowiedzi:

117

Podczas korzystania z Homebrew następujące polecenie daje lepszy obraz:

brew doctor

Wynik:

==> / usr / bin występuje przed / usr / local / bin Oznacza to, że zamiast programów dostarczonych przez Homebrew będą używane programy systemowe. Jest to problem, jeśli np. zaparzyć zainstalowany Python.

Rozważ edycję pliku .bash_profile, aby umieścić: / usr / local / bin przed / usr / bin w zmiennej $ PATH.

Vishal
źródło
4
Upewnij się, że nie masz / user / local / bin TWICE na swojej ścieżce. Z jakiegoś powodu w mojej ŚCIEŻCE pojawił się zarówno przed / po / usr / bin i doprowadzał mnie do szału.
vinaut
1
wiele programów używa / usr / bin / python w nagłówku, co sprawia, że ​​nie jest to realne rozwiązanie.
mschuett,
5
tylko dla naparu w High Sierra python2znajduje się w / usr / local / bin, tylko dla just python; ustawiony export PATH="/usr/local/opt/python/libexec/bin:$PATH"w~/.bash_profile
tormodatt
86

Zobacz: Jak dowiązać do Pythona w Homebrew?

$ brew link --overwrite python
Linking /usr/local/Cellar/python/2.7.3... 28 symlinks created
$ which python
/usr/local/bin/python
akauppi
źródło
11
dlaczego tak się nie dzieje, gdy parzę instalację Pythona?
Ben West
4
@BenWest, ponieważ python3, teraz dostajesz python2 zamiast python.
georgexsh
1
Nie mam tego włączonego.
theonlygusti
1
W moim przypadku musiałem zrestartować terminal po uruchomieniu tego polecenia (zgodnie z odpowiedzią Martijna Courteaux )
jkmartindale
2
to linki python @ 2 dla mnie
Andrew B.
63

Szybka naprawa:

  1. otwarty /etc/paths
  2. Zmień kolejność linii (najwyższy priorytet na górze)

W moim przypadku /etc/pathswygląda to tak:

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

Jeśli chcesz dowiedzieć się więcej o ścieżkach w OSX, ten artykuł był bardzo przydatny:

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

Bijan
źródło
1
Dziękuję, wszystkie powyższe odpowiedzi rozwiązały mój problem, ale twoje! Dziękuję bardzo!
Sean
7
Problem polega na tym, że zmienia to dla wszystkich użytkowników: /, IMO lepiej jest zmienić coś bardziej szczegółowego.
Randall Hunt
@RandallHunt jak i co?
Mike Kormendy
63

Zgodnie z sugestią samego instalatora homebrew, dodaj to do swojego .bashrclub .zshrc:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"
Pamput
źródło
11
To jest poprawna metoda w High Sierra. Głosować!
tormodatt
MacOS domyślnie przyjmuje terminal Zsh, więc są szanse, że to .zshrcplik, a nie .bashrcplik, który należy zmienić.
user394430
1
Żadna z pozostałych odpowiedzi nie działała dla mnie poza tym! z systemem MacOS Catalina tutaj. Dzięki!
Ali Akbar
To poprawna odpowiedź
HarshMarshmallow
44

Zrobiłem „brew install python” dla OSX High Sierra. $PATHMiał /usr/local/binprzed każdym innym drogi, ale wciąż which pythonwskazywał na pytona systemu.

Kiedy spojrzałem głębiej, okazało się, że nie ma pliku wykonywalnego Pythona /usr/local/bin. Plik wykonywalny ma nazwę python2. Aby rozwiązać ten problem, utwórz dowiązanie symboliczne pythonwskazujące na python2:

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

Sachin Khot
źródło
4
Potwierdzono, że to rozwiązuje problem w High Sierra
RandomDeduction
Jesteś moim bohaterem. Nie mogę uwierzyć, że nie zdawałem sobie sprawy z tego rozwiązania!
Smokin Joe
3
Konieczne jest także ponowne uruchomienie terminala w celu zastosowania
lexa-b
3
$ cd / usr / local / bin $ ln -s python3 python
Pnemonic
1
i przypuszczam również sym-link pip do pip3 (lub pip2)?
alexP_Keaton
23

Homebrew NIE zastępuje rzeczy w „/ usr / bin”. Po prostu chcesz umieścić „/ usr / local / bin” przed „/ usr / bin” na swojej ścieżce, a następnie „który python” da ci „/ usr / local / bin / python”.

Zastąpienie / usr / bin / python (lub / usr / bin / ruby) jest wysoce niezalecane.

Adam Vandenberg
źródło
2
Ale tak nie jest!
theonlygusti
22

pythonobecnie używa formuły python3(na razie v3.6.5), brew połączy katalog :

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

połączy również plik binarny :

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

Jeśli nadal musisz używać python2.x, użyj:

brew install python@2

Aby użyć homebrew's python, po prostu umieść jego katalog w PATH, na bash:

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

dla ryb:

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

Uwaga:

  1. spowoduje to cień domyślnej wersji systemu python
  2. homebrew służy do łączenia Pythona ze /usr/local/share/pythonstarszymi wersjami.
PickBoy
źródło
To była dla mnie sztuczka. Domyślnie brew instaluje się python3na twojej ścieżce - nie jest to exec o nazwie python.. W szczególności odwołanie się /usr/local/opt/python/libeexec/bindo innych katalogów na mojej ścieżce rozwiązało problem.
cam8001
13

Zmodyfikuj swoją ŚCIEŻKĘ $, Dodaj to w swoim bashrc lub bash_profile:

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

więcej kliknij tutaj: numer 89791

Aben
źródło
Mój edytor „PyCharm” używał ~ / .bashrc i nie mogłem uruchomić Pythona Brew'a, dopóki ten mały klejnot. Dzięki @Aben
JamesDeHart
10

Musisz edytować zmienną środowiskową PATH, aby upewnić się, że gdziekolwiek znajduje się python homebrew, jest przeszukiwany przed / usr / bin. Możesz również ustawić rzeczy w konfiguracji powłoki, aby zmienna taka jak PYTHON była ustawiona na żądaną wersję Pythona i wywołania $PYTHONzamiast pythonz wiersza poleceń.

Ponadto, jak napisano w innym plakacie (a zwłaszcza na Macu), NIE zadzieraj z pythonem w / usr / bin, aby wskazać inną instalację Pythona. Po prostu prosisz o kłopoty, jeśli tak.

JoshAdel
źródło
9

Zrobiłem brew install python, mój $PATHbył dobry, ale nadal which pythondał mi system zainstalowany. Ponowne uruchomienie terminala naprawiło to.

Martijn Courteaux
źródło
1
To wszystko, co musiałem zrobić. Nie jestem jednak pewien, kiedy to zrobić. To brzmi jak po prostu uruchom, brew install pythona następnie uruchom ponownie terminal i nic więcej? Nie musisz brew unlink& brew link?
Con Antonakos,
Zaraz po zainstalowaniu Pythona za pomocą brew, „który python” podaje mi poprawną lokalną ścieżkę do Pythona, ale polecenie „python” wskazało, że to system został wywołany. Uruchom ponownie terminal naprawił to.
Michelle,
2
terminal restartu nie jest konieczny, spróbujhash -r
georgexsh
JFC, traciłem rozum, dopóki tego nie przeczytałem. Zrobiłem już brew unlink & brew linkkilka razy. Potrzebne było tylko ponowne uruchomienie terminala
Dominic
6

pythonteraz wskazuje na python3, jeśli potrzebujesz, python 2to: brew install python@2a następnie w pliku .zshrc lub .bashrc export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" Now pyhon --version= Python 2.7.14 i python3 --version= Python 3.6.4. Takie zachowanie przyzwyczaiłem się do terminala.

piksel 67
źródło
5

Wierzę, że istnieją sposoby na ustawienie domyślnego Pythona jako homebrew, ale moim zdaniem właściwym sposobem rozwiązania problemu jest nie zadzieranie ze ścieżkami systemowymi: lepiej jest stworzyć virtualenv, w którym domyślnie byłby python homebrew (używając virtualenv - -python). Używanie takich narzędzi python_selectjest prawie zawsze złym pomysłem.

Michaił Korobow
źródło
2

Zamiast tego użyj pyenv, aby zainstalować i przełączać się między wersjami Pythona. Używam rbenv od lat, co robi to samo, ale dla Ruby. Wcześniej zarządzanie wersjami było piekłem.

Skonsultować stronę GitHub pyenv za instrukcje instalacji. Zasadniczo wygląda to tak: - Zainstaluj pyenv za pomocą homebrew. brew install pyenv - Dodaj funkcję na końcu skryptu uruchamiania powłoki, aby pyenv mógł wykonać swoją magię.echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Użyj pyenv, aby zainstalować dowolną liczbę różnych wersji Pythona. pyenv install 3.7.7.
  • Ustaw domyślną (globalną) wersję na właśnie zainstalowaną nowoczesną wersję. pyenv global 3.7.7.
  • Jeśli pracujesz nad projektem, który wymaga użycia innej wersji Pythona, zajrzyj do pyevn local. Spowoduje to utworzenie pliku w folderze projektu, który określa wersję Pythona. Pyenv będzie wyglądał, jakby zastąpił globalną wersję Pythona wersją w tym pliku.
mpoisot
źródło
1

Po prostu zrób:

brew install python
brew link python

Po wykonaniu tej czynności dodaj to do swojego bashrc lub bash_profile:

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

Cieszyć się!

Aaditya Prasad
źródło
Wygląda na to, że napotkałeś ten sam problem, co ja. Wszystkie linki, które tworzy brew, nawet z linkpoleceniami w odpowiedziach tutaj, /usr/local/binsą dla python2zamiast python. Użycie aliasu do obejścia tego wydaje się złym pomysłem, ale nie znalazłem jeszcze nic lepszego.
Patrick M,
Zamiast pseudonimu, właśnie go skopiowałem cp /usr/local/bin/python2 /usr/local/bin/pythoni wydawało się, że działa dobrze. Czy to jeszcze brzydsze obejście?
kingb12,
1

Dodaj /usr/local/opt/python/libexec/binjawnie do .bash_profile:

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

Następnie powinien działać poprawnie.

Dmytro Melnychuk
źródło
1

Jeśli jesteś skorupą ryb

echo 'set -g fish_user_paths "/usr/local/opt/python/libexec/bin" $fish_user_paths' >> ~/.config/fish/config.fish
KelaKing
źródło
0

Możesz edytować / etc / paths. Tu jest moje:

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

Następnie dodaj dowiązanie symboliczne dla wersji python. W moim przypadku

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

Voila!

Christian Oviedo Gabarda
źródło
0

Od High Sierra musisz użyć:

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

Wynika to z faktu, że /usr/localnie można go już obalić

zaolian
źródło
-7

Nie mam pojęcia, co masz na myśli, mówiąc o domyślnym języku Python. Uważam za złą praktykę zastępowanie systemowego interpretera języka Python inną wersją. Funkcjonalność systemu może w pewien sposób zależeć od systemowego Pythona i określonych modułów lub określonej wersji Pythona. Zamiast instalować instalacje niestandardowe Pythona w bezpiecznym miejscu i dopasować różne $ PATH, ile potrzeba, aby wywołać cię Python poprzez ścieżki odnośników zamiast szuka domyślnie Pythona.

Andreas Jung
źródło
5
w systemie OS X nie ma ryzyka, że ​​python homebrew znajdzie się przed pythonem systemu na ścieżce. To jest bardzo powszechne.
Steven Noble,
3
Konieczność użycia Pythona spoza Apple jest również realna. Próbowałem uruchomić Matplotlib, NumPy i SciPy z domyślnym Pythonem (Apple). Chodzi o to, że traktuje 32/64 bity, które po prostu rozbijają rozszerzenia. Bardzo, bardzo, bardzo cieszę się, że zamiast tego mamy przyjemny Napar. I domyślnie („brew install python”) Brew robi dokładnie to, co masz na myśli - instaluje drugiego Pythona w osobnej strukturze, nie zastępując ścieżek (właśnie dlatego powstaje to pytanie SO).
akauppi