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 ?
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
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.
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:
python
/usr/local/share/python
in older versions.I did brew install python
, my $PATH
was good, but still, which python
gave me the system installed one. Restarting the terminal fixed it.
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"
Quick fix:
/etc/paths
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/
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.
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.
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!
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.
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.
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
See: 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
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.
Since High Sierra, you need to use:
sudo chown -R $(whoami) $(brew --prefix)/*
This is because /usr/local
can no longer be chowned
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!
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
pyenv install 3.7.7
.pyenv global 3.7.7
.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. If you are fish shell
echo 'set -g fish_user_paths "/usr/local/opt/python/libexec/bin" $fish_user_paths' >> ~/.config/fish/config.fish
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.
Source: Stackoverflow.com