Как использовать Brew установленный Python в качестве Python по умолчанию?


188

Я пытаюсь перейти на Homebrew (после использования fink и macport) в 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не символическая ссылка

Как я могу сделать Python Brew flavour моим Python по умолчанию?


14
Homebew больше не скрывает системную установку python. Вы можете сделать: export PATH="/usr/local/opt/python/libexec/bin:$PATH"источник: discourse.brew.sh/t/…
Джордж

3
Я попробовал все упомянутые ответы, / usr / local / bin находится перед / usr / bin в моем $ PATH. Я попробовал brew link и unlink, brew doctor не сообщил о том, что / usr / bin был до / usr / local / bin, о проблеме. Тем не менее, когда я делаю Python, я получаю / usr / bin / python, а не тот, который установлен с brew.
Уджвал Ратра

попробуй ... какой python2
Fraser

Ответы:


118

Поскольку вы используете Homebrew, следующая команда дает лучшую картину:

brew doctor

Вывод:

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

Попробуйте отредактировать ваш .bash_profile, чтобы поместить: / usr / local / bin перед / usr / bin в $ PATH.


4
Убедитесь, что у вас нет / user / local / bin ДВАЖДЫ на вашем пути. По какой-то причине в моем PATH он появился как до, так и после / usr / bin, и это сводило меня с ума.
Винаут

1
многие программы используют / usr / bin / python в заголовке, что делает это решение нежизнеспособным.
MSCHUETT

5
для brew в High Sierra - только python2в / usr / local / bin, для just python; Набор export PATH="/usr/local/opt/python/libexec/bin:$PATH"в~/.bash_profile
tormodatt

86

Смотрите: Как сделать символическую ссылку на Python в Homebrew?

$ 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

Как подсказывает сам установщик homebrew, обязательно добавьте это в ваш .bashrcили .zshrc:

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

11
Это правильный метод на Высокой Сьерре. Проголосуй!
tormodatt

MacOS по умолчанию использует терминал zsh, поэтому скорее всего это .zshrcфайл, а не .bashrcфайл, который необходимо изменить.
user394430

1
Ни один из других ответов не работал для меня, кроме этого! здесь работает macOS Catalina. Спасибо!
Али Акбар

Это правильный ответ
HarshMarshmallow

44

Я сделал "brew install python" для OSX High Sierra. У $PATHнего был /usr/local/binкакой-то другой путь, но он все еще which pythonуказывал на системный питон.

Когда я посмотрел глубже, я обнаружил, что нет исполняемого файла python /usr/local/bin. Исполняемый файл называется python2. Чтобы решить эту проблему, создайте символическую ссылку, pythonуказывающую на python2:

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


4
Подтверждено, что это исправляет проблему в High Sierra
RandomDeduction

Ты мой герой. Не могу поверить, что я не понял это решение!
Смокин Джо

3
Также необходимо перезапустить терминал для применения
lexa-b

3
$ cd / usr / local / bin $ ln -s python3 python
Пнемоник

1
и я полагаю также pip sym-link для pip3 (или pip2)?
alexP_Keaton

23

Homebrew НЕ заменяет вещи в "/ usr / bin". Вы просто захотите поставить "/ usr / local / bin" перед "/ usr / bin" на вашем пути, а затем "какой питон" даст вам "/ 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

Чтобы использовать homebrew's 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в более старых версиях.

Это был трюк для меня. По умолчанию, brew устанавливается 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

больше нажмите здесь: выпуск № 89791


Мой редактор "PyCharm" использовал ~ / .bashrc, и я не мог заставить работать питон brew до этой маленькой жемчужины. Спасибо @Aben
JamesDeHart

10

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

Кроме того, как сказал другой автор (и особенно на Mac), НЕ связывайтесь с питоном в / usr / bin, чтобы указать на другую установку питона. Вы просто напрашиваетесь на неприятности, если делаете.


9

Я сделал brew install python, мой $PATHбыл хорош, но все же, which pythonдал мне систему, установленную один. Перезапуск терминала исправил это.


1
Это все, что мне нужно было сделать. Я не уверен, когда делать это, хотя. Похоже, просто выполнить, brew install pythonа затем, перезапустить терминал, и ничего больше? Нет необходимости brew unlink& brew link?
Кон Антонакос

Сразу после установки python с использованием brew, «which 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" Now, pyhon --version= Python 2.7.14 и python3 --version= Python 3.6.4. Такое поведение я привык видеть в моем терминале.


5

Я полагаю, что есть способы сделать homebrew python по умолчанию, но, на мой взгляд, правильный способ решения проблемы - не связываться с путями системного python: лучше создать virtualenv, в котором homebrew python будет использоваться по умолчанию (используя virtualenv - опция -Python) Использование таких инструментов, как python_selectпочти всегда плохая идея.


2

Вместо этого используйте pyenv для установки и переключения между версиями Python. Я годами использую rbenv, который делает то же самое, но для Ruby. До этого было адское управление версиями.

Обратитесь к странице github pyenv для инструкций по установке. В основном это выглядит так: - Установите pyenv с помощью homebrew. 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 будет переопределять глобальную версию Python с версией в этом файле.

1

Просто сделать:

brew install python
brew link python

После этого добавьте это в ваш bashrc или bash_profile:

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

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


Похоже, вы столкнулись с той же проблемой, что и я. Все ссылки, которые создает brew, даже с 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

Начиная с High Sierra, вам необходимо использовать:

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

Это потому, что /usr/localбольше не может быть сыт


-7

Понятия не имею, что вы имеете в виду с Python по умолчанию. Я считаю плохой практикой заменять системный интерпретатор Python другой версией. Функциональность системы может в некоторой степени зависеть от системного Python и конкретных модулей или конкретной версии Python. Вместо этого установите ваши собственные установки Python в безопасном другом месте и отрегулируйте $ PATH так, как вам нужно, чтобы вызывать вас Python через поиск пути вместо поиска Python по умолчанию.


5
в OS X нет риска, что Python Homebrew появится раньше, чем Python системы на пути. Это очень распространено.
Стивен Нобл

3
Кроме того, необходимость использования не-Apple Python является реальной. Я пытался заставить matplotlib, NumPy и SciPy работать и работать с Python по умолчанию (он же Apple). Это что-то в обработке 32/64 битов, которая просто разрывает расширения. Очень, очень, очень рад, что вместо этого есть хороший напиток. И по умолчанию ('brew install python') Brew делает именно то, что вы имеете в виду - он устанавливает второй Python в отдельную структуру, а не переопределяет пути (именно поэтому возникает этот вопрос SO).
akauppi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.