Reputation: 61
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?
Upvotes: 6
Views: 6253
Reputation: 21
I might be a little late to answer but I just ran into the same problem and I checked if pipenv
can be installed with apt, turns out that's true. I guess that would be a safer way than using --break-system-packages
Upvotes: 1
Reputation: 5935
As the error message suggests, you can run pip with --break-system-packages
:
pip install pipenv --user --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
:
This can be overriden by passing the --break-system-packages option to pip. You do this at your own risk: pip may break Python modules that part of your Debian system depends on. This option can also be specified by exporting PIP_BREAK_SYSTEM_PACKAGES=1 or configuring the following in ~/.config/pip/pip.conf or /etc/pip.conf:
[global] break-system-packages = true
See also the final note:
A clean option is to install your own Python (from source) in /usr/local, that isn't EXTERNALLY-MANAGED.
Upvotes: 3
Reputation: 21
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.
Upvotes: 1