Як я можу використовувати встановлений пивом Python як Python за замовчуванням?


188

Я намагаюся перейти на Homebrew (після використання фінка та макпорту) на Mac OS X 10.6.2. Я встановив python 2.7 с

brew install python 

Проблема полягає в тому, що, на відміну від Macport, здається, що утиліти python_select не існує, а мій mac python завжди за замовчуванням

which python

дай мені

/usr/bin/python

і /usr/bin/pythonне є симпосиланнями

Як я можу зробити, щоб аромат пивоваріння пітона був моїм пітоном за замовчуванням?


14
Homebew більше не затінює встановлення системи python. Можна зробити: export PATH="/usr/local/opt/python/libexec/bin:$PATH"джерело: discourse.brew.sh/t/…
Джордж

3
Я спробував усі згадані відповіді, / usr / local / bin приходить до / usr / bin в моїй $ PATH. Я спробував заварювати посилання та від’єднати, лікар-пивовар не повідомив про те, що / usr / bin був раніше / usr / local / bin. Ще коли я роблю який python, я отримую / usr / bin / python, а не той, що встановлений з brew.
Ujwal Ratra

спробуйте ... який python2
Фрейзер

Відповіді:


117

Під час використання Homebrew наступна команда дає кращу картину:

brew doctor

Вихід:

==> / usr / bin відбувається перед / usr / local / bin Це означає, що програми, що надаються системою, будуть використовуватися замість тих, що надаються Homebrew. Це питання, якщо ви, наприклад. варити встановлений Python.

Подумайте про редагування .bash_profile, щоб: / usr / local / bin попереду / usr / bin у вашому $ PATH.


4
Переконайтесь, що у вас на шляху немає / користувач / локальний / сміттєвий контейнер Чомусь у моїй ПАРТІ з'явився і до, і після / usr / bin, і це мене зводило з розуму.
віно

1
багато програм використовують / usr / bin / python у заголовку, що робить це не прийнятним рішенням.
mschuett

5
для пива у Високій Сьєррі python2є лише / usr / local / bin, for just python; Набір export PATH="/usr/local/opt/python/libexec/bin:$PATH"в~/.bash_profile
tormodatt

86

Див.: Як символізувати python на домашньому?

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

11
чому цього не відбувається, коли я заварюю встановити python?
Бен Вест

4
@BenWest тому що python3, тепер ви отримуєте python2, а не python.
georgexsh

1
У мене це не ввімкнено.
theonlygusti

1
У моєму випадку мені потрібно було перезапустити термінал після запуску цієї команди (як зазначається у відповіді Мартійна Курто )
jkmartindale

2
це посилання python @ 2 для мене
Ендрю Б.

63

Швидке виправлення:

  1. відчинено /etc/paths
  2. Зміна порядку рядків (найвищий пріоритет зверху)

У моєму випадку /etc/pathsвиглядає так:

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

Якщо ви хочете дізнатися більше про шляхи до OSX, я вважаю цю статтю досить корисною:

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


1
Дякую, всі вищевказані відповіді вирішили мою проблему, але ви зробили! Дуже дякую!
Шон

7
Проблема в цьому полягає в тому, що він змінює його для всіх користувачів: /, IMO краще змінити щось більш конкретне.
Полювання на Рендалла

@RandallHunt як і що?
Майк Корменді

63

Як запропонував сам інсталятор домашньої програми, обов'язково додайте це до свого .bashrcабо .zshrc:

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

11
Це правильний метод на Високій Сьєррі. Голосуйте!
tormodatt

MacOS за замовчуванням відповідає терміналу zsh, тому ймовірно, що саме .zshrcфайл, а не .bashrcфайл потрібно змінити.
користувач394430

1
Жодна з інших відповідей для мене не працювала, крім цієї! тут працює MacOS Catalina. Дякую!
Алі Акбар

Це правильна відповідь
HarshMarshmallow

44

Я зробив "варити встановити python" для OSX High Sierra. $PATHБуло /usr/local/binколись , ніж будь - якої іншої шлях , але все ще which pythonвказували на пітон системи.

Коли я заглянув глибше, то виявив, що в ньому немає виконуваного пітона /usr/local/bin. Виконаний файл названий python2. Щоб вирішити цю проблему, створіть символічне посилання, що pythonвказує на python2:

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


4
Підтверджено це виправляє проблему на Високій Сьєррі
RandomDeduction

Ви - мій герой. Не можу повірити, що я не усвідомив це рішення!
Смокін Джо

3
Також потрібно перезапустити термінал для
подачі

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

1
і я припускаю, що також sym-link pip до pip3 (або pip2)?
alexP_Keaton

23

Homebrew НЕ замінює речі в "/ usr / bin". Ви просто хочете поставити "/ usr / local / bin" попереду "/ usr / bin" на своєму шляху, тоді "який python" дасть вам "/ usr / local / bin / python".

Заміна / usr / bin / python (або / usr / bin / ruby) вкрай не рекомендується.


2
Але це не так!
theonlygusti

22

pythonформула тепер використовує python3(v3.6.5 на даний момент), brew зв’яже каталог :

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

він також пов'язує двійкове :

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

Якщо вам все-таки потрібно скористатися python2.x, використовуйте:

brew install python@2

Щоб використовувати домашню мову python, просто покладіть її каталог в PATH, для bash:

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

для риби:

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

Примітка:

  1. це затінить системну версію за замовчуванням python
  2. homebrew використовується для посилання python /usr/local/share/pythonу більш старих версіях.

Це була хитрість для мене. За замовчуванням python3на вашому шляху встановлюється вариво - це не exec, який називається python.. Спеціально посилаючись /usr/local/opt/python/libeexec/binна інші каталоги на моєму шляху, відсортували речі.
cam8001

13

Змініть свій $ PATH, додайте це у свій bashrc або bash_profile:

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

більше натисніть тут: Issue # 89791


Мій редактор "PyCharm" використовував ~ / .bashrc, і мені не вдалося змусити пітону Brew працювати до цього маленького коштовного каменя. Спасибі @Aben
JamesDeHart

10

Вам потрібно відредагувати змінну середовища PATH, щоб переконатися, що там, де знаходиться домашній пітон, шукається перед / usr / bin. Ви також можете налаштувати речі в конфігурації оболонки, щоб змінна типу PYTHON була встановлена ​​на бажану версію python та виклику, $PYTHONа неpython з командного рядка.

Крім того, як інший плакат заявив (і особливо на mac), НЕ возиться з python в / usr / bin, щоб вказати його на іншу установку python. Ви просто просите неприємностей, якщо зробите.


9

Я зробив brew install python, моє $PATHбуло добре, але все-таки which pythonдав мені встановлену систему. Перезапуск терміналу виправив його.


1
Це все, що мені потрібно було зробити. Я не впевнений, коли це робити. Це звучить як просто виконати, brew install pythonа потім перезапустити термінал і більше нічого? Не потрібно brew unlink& brew link?
Con Antonakos

Одразу після встановленого python за допомогою brew, "який python" дає мені правильний локальний шлях python, але команда "python" вказала, що в системі встановлено один виклик. Термінал перезапуску зафіксував.
Мішель

2
термінал перезавантаження не потрібен, спробуйтеhash -r
georgexsh

JFC, я втрачав розум, поки не прочитав це. Я вже робив brew unlink & brew linkкілька разів. Потрібно лише перезапустити термінал
Домінік

6

pythonТепер вказує на python3, якщо вам потрібно, python 2то зробіть: brew install python@2а потім у вашому .zshrc або .bashrc-файлі export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" Тепер, pyhon --version= Python 2.7.14 і python3 --version= Python 3.6.4. Така поведінка я звикла бачити в своєму терміналі.


5

Я вважаю, що є засоби зробити домашній пітон за замовчуванням, але, на мою думку, правильним способом вирішити проблему є не возитися із системними шляхами python: краще створити virtualenv, у якому python homebrew був би за замовчуванням (використовуючи virtualenv - -пітфон варіант). Використовуючи такі інструментиpython_select майже завжди є поганою ідеєю.


2

Замість цього використовуйте pyenv для встановлення та переключення між версіями Python. Я використовую rbenv роками, що робить те ж саме, але для Ruby. До цього це було пекельне управління версіями.

Зверніться на сторінку github pyenv щодо інструкцій із встановлення. В основному це виглядає так: - Встановіть pyenv, використовуючи домашню мову. brew install pyenv - Додайте функцію до кінця сценарію запуску оболонки, щоб pyenv змогла зробити це магією.echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Використовуйте pyenv, щоб встановити скільки завгодно різних версій Python. pyenv install 3.7.7.
  • Встановіть типову (глобальну) версію на сучасну версію, яку ви тільки що встановили. pyenv global 3.7.7.
  • Якщо ви працюєте над проектом, для якого потрібно використовувати іншу версію python, погляньте на це pyevn local. Це створює файл у папці вашого проекту, який визначає версію python. Pyenv буде переглядати глобальну версію пітона з версією у цьому файлі.

1

Просто зробіть:

brew install python
brew link python

Після цього додайте це до свого bashrc або bash_profile:

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

Насолоджуйтесь!


Здається, ви зіткнулися з тією ж проблемою, що і я. Усі посилання, що створюються, навіть із linkкомандами у відповідях тут, /usr/local/binпризначені python2замість python. Використання псевдоніма для вирішення цього питання здається поганою ідеєю, але я нічого кращого ще не знайшов.
Патрік М

Замість псевдоніму я просто скопіював це cp /usr/local/bin/python2 /usr/local/bin/pythonі, здавалося, добре працює. Це ще потворніша робота?
kingb12

1

Додайте /usr/local/opt/python/libexec/binявно до свого .bash_profile:

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

Після цього воно повинно працювати правильно.


1

Якщо ви - риба шкаралупа

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

0

Ви можете редагувати / etc / paths. Ось моя:

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

Потім додайте символьне посилання для версії python. У моєму випадку

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

Вуаля!


0

Оскільки Висока Сьєрра, вам потрібно використовувати:

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

Це тому, що /usr/localбільше не можна порушувати


-7

Не маю поняття, що ви маєте на увазі під Python за замовчуванням. Я вважаю поганою практикою заміну системного інтерпретатора Python на іншу версію. Функціональність системи може певним чином залежати від системного Python та конкретних модулів або певної версії Python. Замість цього встановіть власні установки Python у безпечному іншому місці та відрегулюйте ваш $ PATH за потребою для того, щоб зателефонувати вам на Python через пошук шляху, а не шукати Python за замовчуванням.


5
в OS x немає жодного ризику, щоб пітфон домашньої бірки вийшов перед пітоном системи на шляху. Це дуже часто.
Стівен Ноубл

3
Також необхідність використання не-Apple Python реальна. Я намагався запустити matplotlib, NumPy та SciPy з „за замовчуванням“ (він же Apple) Python. Це щось про його обробку 32/64 біт, який просто роздуває розширення. Дуже, дуже, дуже радий натомість приємний заварник. І за замовчуванням ('brew install python') Brew робить саме те, що ви маєте на увазі - він встановлює другий Python в окрему структуру, не перекриваючи шляхи (саме тому виникає це питання SO).
akauppi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.