skip to Main Content

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


  1. 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.

    Login or Signup to reply.
  2. 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.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search