How do I use brew installed Python as the default Python?

PythonHomebrew

Python Problem Overview


I try to switch to Homebrew (after using fink and macport) on Mac OS X 10.6.2. I have installed python 2.7 with

brew install python 

The problem is that, contrary to Macport, it seems that there is no python_select utility, and my default mac python is always default

which python

give me

/usr/bin/python

and /usr/bin/python is not a symlink

How can I do to make python brew flavour to be my default python ?

Python Solutions


Solution 1 - Python

As you are using Homebrew the following command gives a better picture:

brew doctor

Output:

> ==> /usr/bin occurs before /usr/local/bin This means that system-provided programs will be used instead of those provided by > Homebrew. This is an issue if you eg. brew installed Python. > > Consider editing your .bash_profile to put: /usr/local/bin ahead of > /usr/bin in your $PATH.

Solution 2 - Python

As suggested by the homebrew installer itself, be sure to add this to your .bashrc or .zshrc:

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

Solution 3 - Python

See: https://stackoverflow.com/questions/13354207/how-to-symlink-python-in-homebrew

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

Solution 4 - Python

Quick fix:

  1. Open /etc/paths
  2. Change the order of the lines (highest priority on top)

In my case /etc/paths looks like:

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

If you want to know more about paths in OSX I found this article quite useful:

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

Solution 5 - Python

I did "brew install python" for OSX High Sierra. The $PATH had /usr/local/bin before any other path but still which python was pointing to the system's python.

When I looked deeper I found that there is no python executable at /usr/local/bin. The executable is named python2. To fix this problem create a symbolic link python pointing to python2:

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

Solution 6 - Python

python formula now uses python3(v3.6.5 for now), brew will link the directory:

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

it will also link the binary:

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

If you still need to use python2.x, use:

brew install python@2

To use homebrew's python, just put its directory in PATH, for bash:

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

for fish:

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

Note:

  1. doing this will shadow the system default version of python
  2. homebrew used to link python to /usr/local/share/python in older versions.

Solution 7 - Python

Homebrew does NOT replace stuff in "/usr/bin". You'll just want to put "/usr/local/bin" ahead of "/usr/bin" in your path, then "which python" will give you "/usr/local/bin/python".

Replacing /usr/bin/python (or /usr/bin/ruby) is highly unrecommended.

Solution 8 - Python

Modify your $PATH, Add this in your bashrc or bash_profile:

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

more click here: Issue #89791

Solution 9 - Python

I did brew install python, my $PATH was good, but still, which python gave me the system installed one. Restarting the terminal fixed it.

Solution 10 - Python

For Apple Silicon machines, the path are slightly different. After running brew install python, you must ensure your ~/.zshrc uses the correct Homebrew paths:

# Homebrew
eval "$(/opt/homebrew/bin/brew shellenv)"

# Homebrew: Python
export PATH="/opt/homebrew/opt/python/libexec/bin:$PATH"

Results:

% which python
/opt/homebrew/opt/python/libexec/bin/python

% python --version
Python 3.9.9

% which pip
/opt/homebrew/opt/python/libexec/bin/pip

% pip -V
pip 21.3.1 from /opt/homebrew/lib/python3.9/site-packages/pip (python 3.9)

Solution 11 - Python

You need to edit your PATH environmental variable to make sure wherever the homebrew python is located is searched before /usr/bin. You could also set things up in your shell config to have a variable like PYTHON be set to your desired version of python and call $PYTHON rather than python from the command line.

Also, as another poster stated (and especially on mac) DO NOT mess with the python in /usr/bin to point it to another python install. You're just asking for trouble if you do.

Solution 12 - Python

python now points to python3, if you need python 2 then do: brew install python@2 and then in your .zshrc or .bashrc file export PATH="/usr/local/opt/python@2/libexec/bin:$PATH" Now, pyhon --version = Python 2.7.14 and python3 --version = Python 3.6.4. That's the behavior I'm used to seeing in my terminal.

Solution 13 - Python

I believe there are means to make homebrew python default, but in my opinion the proper way to solve a problem is not to mess with system python paths: it is better to create a virtualenv in which homebrew python would be default (by using virtualenv --python option). Using tools like python_select is almost always a bad idea.

Solution 14 - Python

Use pyenv instead to install and switch between versions of Python. I've been using rbenv for years which does the same thing, but for Ruby. Before that it was hell managing versions.

Consult pyenv's github page for installation instructions. Basically it goes like this:

  • Install pyenv using homebrew. brew install pyenv

  • Add a function to the end of your shell startup script so pyenv can do it's magic. echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

  • Use pyenv to install however many different versions of Python you need. pyenv install 3.7.7.

  • Set the default (global) version to a modern version you just installed. pyenv global 3.7.7.

  • If you work on a project that needs to use a different version of python, look into pyevn local. This creates a file in your project's folder that specifies the python version. Pyenv will look override the global python version with the version in that file.

Solution 15 - Python

Add the /usr/local/opt/python/libexec/bin explicitly to your .bash_profile:

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

After that, it should work correctly.

Solution 16 - Python

Just do:

brew install python
brew link python

After doing that, add this to your bashrc or bash_profile:

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

Enjoy!

Solution 17 - Python

You can edit /etc/paths. Here is mine:

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

Then add a symlink for the python version. In my case

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

Voila!

Solution 18 - Python

If you are fish shell

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

Solution 19 - Python

Since High Sierra, you need to use:

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

This is because /usr/local can no longer be chowned

Solution 20 - Python

brew link python

And you must create/add an alias for python and put it in your .zprofile (Located in Users/username folder, if you press Shift+command+.

This must point to your homebrew python installation location.

alias python ='opt/homebrew/bin/python3'

Solution 21 - Python

try this

which python3

Try typing python3 instead of just python

Solution 22 - Python

No idea what you mean with default Python. I consider it bad practice to replace the system Python interpreter with a different version. System functionality may depend in some way on the system Python and specific modules or a specific Python version. Instead install your custom Python installations in a safe different place and adjust your $PATH as needed in order to call you Python through a path lookup instead of looking for the default Python.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsamView Question on Stackoverflow
Solution 1 - PythonVishalView Answer on Stackoverflow
Solution 2 - PythonPamputView Answer on Stackoverflow
Solution 3 - PythonakauppiView Answer on Stackoverflow
Solution 4 - PythonBijanView Answer on Stackoverflow
Solution 5 - PythonSachin KhotView Answer on Stackoverflow
Solution 6 - PythonPickBoyView Answer on Stackoverflow
Solution 7 - PythonAdam VandenbergView Answer on Stackoverflow
Solution 8 - PythonAbenView Answer on Stackoverflow
Solution 9 - PythonMartijn CourteauxView Answer on Stackoverflow
Solution 10 - PythonTruMan1View Answer on Stackoverflow
Solution 11 - PythonJoshAdelView Answer on Stackoverflow
Solution 12 - Pythonpixel 67View Answer on Stackoverflow
Solution 13 - PythonMikhail KorobovView Answer on Stackoverflow
Solution 14 - PythonmpoisotView Answer on Stackoverflow
Solution 15 - PythonDmytro MelnychukView Answer on Stackoverflow
Solution 16 - PythonAaditya PrasadView Answer on Stackoverflow
Solution 17 - PythonChristian Oviedo GabardaView Answer on Stackoverflow
Solution 18 - PythonKelaKingView Answer on Stackoverflow
Solution 19 - PythonzaolianView Answer on Stackoverflow
Solution 20 - PythonelmoswebView Answer on Stackoverflow
Solution 21 - PythonMuhammad Hashir uddinView Answer on Stackoverflow
Solution 22 - PythonAndreas JungView Answer on Stackoverflow