I’m trying to install some packages in my home directory, and I’m unable to do so.
I want to install pipenv, using pip install pipenv --user
, but for some reason I’m getting this error:
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.11/README.venv for more information.
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.
Now, I understand that this is supposed to avoid breaking system packages, which are installed by the package manager. What I don’t understand is why am I unable to install any package in my home directory?
2
Answers
Installing packages in your home directory can also break system packages so that’s why it’s disabled too. I just ran into this with a simple wake on lan script which uses the wakeonlan module from PyPI.
I just did what they suggest, I created a venv, installed wakeonlan there and modified the script shebang to point to python inside that venv.
As the error message suggests, you can run pip with
--break-system-packages
:To easiest way to get back the old pre-Debian12 behaviour just for your user, is to add
break-system-packages = true
in the[global]
section of your~/.config/pip/pip.conf
, as noted in/usr/share/doc/python3.11/README.venv
:See also the final note: