S. Dotto
S. Dotto

Reputation: 61

pip install --user doesn't work on Debian 12

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

Answers (4)

Priyansh
Priyansh

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

Arman Ohanyan
Arman Ohanyan

Reputation: 1

sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED

Upvotes: -1

Jan Christoph Terasa
Jan Christoph Terasa

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

anssi
anssi

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

Related Questions