This page describes how Python is handled in Homebrew for users. See Python for Formula Authors for advice on writing formulae to install packages written in Python.
Homebrew should work with any CPython and defaults to the macOS system Python.
Homebrew provides formulae to brew Python 3.x.
Homebrew provided a
python@2 formula until the end of 2019, at which point it was removed due to the Python 2 deprecation.
Important: If you choose to use a Python which isn’t either of these two (system Python or brewed Python), the Homebrew team cannot support any breakage that may occur.
Homebrew provides a formula for Python 3.x (
Important: Python may be upgraded to a newer version at any time. Consider using a version
manager such as
pyenv if you require stability of minor or patch versions for virtual environments.
The executables are organised as follows:
python3points to Homebrew’s Python 3.x (if installed)
pip3points to Homebrew’s Python 3.x’s pip (if installed)
Unversioned symlinks for
pip etc. are installed here:
Setuptools can be updated via pip3, without having to re-brew Python:
python3 -m pip install --upgrade setuptools
Similarly, pip3 can be used to upgrade itself via:
python3 -m pip install --upgrade pip
site-packages is a directory that contains Python modules (especially bindings installed by other formulae). Homebrew creates it here:
So, for Python 3.y.z, you’ll find it at
Python 3.y also searches for modules in:
site-packages directory is first created if (1) any Homebrew formula with Python bindings are installed, or (2) upon
brew install python.
The reasoning for this location is to preserve your modules between (minor) upgrades or re-installations of Python. Additionally, Homebrew has a strict policy never to write stuff outside of the
brew --prefix, so we don’t spam your system.
Some formulae provide Python bindings.
Warning! Python may crash (see Common Issues) if you
import <module> from a brewed Python if you ran
brew install <formula_with_python_bindings> against the system Python. If you decide to switch to the brewed Python, then reinstall all formulae with Python bindings (e.g.
These should be installed via
pip install <package>. To discover, you can use
pip search or https://pypi.python.org/pypi.
Note: macOS’s system Python does not provide
pip. Follow the pip documentation to install it for your system Python if you would like it.
For brewed Python, modules installed with
python3 setup.py install will be installed to the
$(brew --prefix)/lib/pythonX.Y/site-packages directory (explained above). Executable Python scripts will be in
The system Python may not know which compiler flags to set in order to build bindings for software installed in Homebrew so you may need to run:
CFLAGS=-I$(brew --prefix)/include LDFLAGS=-L$(brew --prefix)/lib pip install <package>
WARNING: When you
brew install formulae that provide Python bindings, you should not be in an active virtual environment.
Activate the virtualenv after you’ve brewed, or brew in a fresh terminal window.
Homebrew will still install Python modules into Homebrew’s
site-packages and not into the virtual environment’s site-package.
Virtualenv has a
--system-site-packages switch to allow “global” (i.e. Homebrew’s)
site-packages to be accessible from within the virtualenv.
Formulae that declare an unconditional dependency on the
"python" formula are bottled against Homebrew’s Python 3.x and require it to be installed.