Issues with Pip after Python 3.11 update

The changes in python break pip. Trying to install packages as a regular user results in:

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try 'pacman -S
    python-xyz', where xyz is the package you are trying to
    If you wish to install a non-Arch-packaged Python package,
    create a virtual environment using 'python -m venv path/to/venv'.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip.
    If you wish to install a non-Arch packaged Python application,
    it may be easiest to use 'pipx install xyz', which will manage a
    virtual environment for you. Make sure you have python-pipx
    installed via pacman.

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.

Always read Announcements posts including the Known Issues. Python 3.11 has been in the testing branch for almost a month.

yes, is at us to add --user and (since 3.11/pip) --break-system-packages if we want install in home (not in venv)
BUT note, since pep 668 : user install in home is now DEPRECATED

For permanent option :
in ~/.config/pip/pip.conf file (pip config edit --user)

break-system-packages = true


I did and I already had 3.11 installed.
It’s the latest update that broke it without announcement.

I had --user and I already had 3.11 in usage without the additional flag.
So it must have been a change in the update.

this flag for pip

All the major python packages has been packaged by Arch for pacman.

Over the years there has been a lot of problems with sudo pip on Arch and Manjaro.

Python system packages can be found In the repo and they are prefixed python- followed by the package name.

Maybe this needs clarification but I never ran pip as root. Only ever as a user with the --user.
Adding --break-system-packages somewhat solved the issue but I still don’t get why it became necessary now in a build revision bump.

1 Like