How can I use Homebrew to install both Python 2 and 3 on Mac?

Currently Homebrew provides two different formulas for Python 2 and 3. brew install python installs python3, and brew install python@2 installs python2. More details in Homebrew docs:

https://docs.brew.sh/Homebrew-and-Python

If you currently have 2.x installed via Homebrew, Homebrew will give you a message such as:

Error: python 2.7.14 is already installed
To upgrade to 3.6.5, run `brew upgrade python`

If you run:

brew upgrade python

you should be able to do:

python --version

and

python3 --version

To see what versions of Python 2.x and 3.x installed.


You can have both versions installed at the same time.

For Homebrew >=1.5.0:

Since 1st March 2018 the python formula will be upgraded to Python 3.x, while a new python@2 formula will be added for Python 2.7, specifically.

See changes announcement here or the final doc about using Homebrew for Python here.

For older Homebrew:

For Python 2.x:

brew install python

For Python 3.x:

brew install python3

Now, you will have both the versions installed in your machine. When you want to use version 2, use the python executable. When you want to use version 3, use the python3 executable.


I would use pyenv You can install it:

$ brew install pyenv

To enable pyenv in your Bash shell, you need to run:

$ eval "$(pyenv init -)"

To do this automatically for Bash upon startup, add that line to your ~/.bash_profile. 1

Usage:

Once you have installed pyenv and activated it, you can install different versions of python and choose which one you can use. Example:

$ pyenv install 2.7.5

You can check the versions you have installed with:

$ pyenv versions

And you can switch between python versions with the command:

$ pyenv global 3.3.1

Also you can set a python version for the current directory with:

$ pyenv local 3.5.2

You can check by running python --version:

$ python --version
Python 3.5.2

1 Homebrew used to instruct you to do this upon installation of pyenv, but the message was removed. For Zsh and other shells, the precise steps may be different.