For example, if I run:
pip3 install matplotlib
I get error:
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
xyz, where xyz is the package you are trying to
install.
If you wish to install a Python library that isn't in Homebrew,
use a virtual environment:
python3 -m venv path/to/venv
source path/to/venv/bin/activate
python3 -m pip install xyz
If you wish to install a Python application that isn't in Homebrew,
it may be easiest to use 'pipx install xyz', which will manage a
virtual environment for you. You can install pipx with
brew install pipx
You may restore the old behavior of pip by passing
the '--break-system-packages' flag to pip, or by adding
'break-system-packages = true' to your pip.conf file. The latter
will permanently disable this error.
If you disable this error, we STRONGLY recommend that you additionally
pass the '--user' flag to pip, or set 'user = true' in your pip.conf
file. Failure to do this can result in a broken Homebrew installation.
Read more about this behavior here: <https://peps.python.org/pep-0668/>
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
[notice] A new release of pip is available: 24.0 -> 24.1.2
[notice] To update, run: python3.12 -m pip install --upgrade pip
And when I do:
brew install matplotlib
That just hangs for ever, even hours later, even though installing matplotlib in a venv only takes a few minutes.
What gives? How can I install matplotlib system-wide using pip3 on MacOS, and bypass the stupid externally managed error?
Try following the advice in the message. First,
python3 -m pip install matplotlib --break-system-packages
If you are doing this all the time, it would also make sense to edit your pip.conf file. The file is usually located at ~/.config/pip/ for macOS, though you may need to create it if it does not already exist. Add the following lines to your pip.conf file:
[global]
break-system-packages = true
user = true
Finally, upgrade pip:
python3 -m pip install --upgrade pip --break-system-packages
This will bypass the PEP 668 protections and allow the installation of packages globally without creating virtual environments.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With