3

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?

2

1 Answer 1

2

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Upgrading Pip will absolutely not "bypass the PEP 668 protections". If you mean in conjunction with the pip.conf edit, Pip has recognized the pip.conf file for a very long time, and if Pip weren't recognizing the --break-system-packages option then the command shown for self-update wouldn't work, either. Keeping Pip up to date is a good idea in general, but not relevant to the problem. Aside from that, creating virtual environments is generally the correct approach. Adding code to the system environment (even with --user) can have unintended consequences.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.