pipmacos-sonoma

Pip is installed but can not add python packages like Django


I am setting up my new Macbook air M1 laptop which is running sonoma. I've succesfully downloaded Homebrew and seem to have downloaded pip (However it could be in the wrong directory). But when run pip3 install Django I get this error message:

python3 -m pip install Django                                             ─╯
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
    xyz, where xyz is the package you are trying to
    install.

    If you wish to install a Python library that isn't in Homebrew,
    use a virtual environment:

    python3 -m venv path/to/venv
    source path/to/venv/bin/activate
    python3 -m pip install xyz

    If you wish to install a Python application that isn't in Homebrew,
    it may be easiest to use 'pipx install xyz', which will manage a
    virtual environment for you. You can install pipx with

    brew install pipx

    You may restore the old behavior of pip by passing
    the '--break-system-packages' flag to pip, or by adding
    'break-system-packages = true' to your pip.conf file. The latter
    will permanently disable this error.

    If you disable this error, we STRONGLY recommend that you additionally
    pass the '--user' flag to pip, or set 'user = true' in your pip.conf
    file. Failure to do this can result in a broken Homebrew installation.

    Read more about this behavior here: <https://peps.python.org/pep-0668/>

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.

Not really sure where to go from here as ive tried brew install pipx and pipx install Django. If pip is downloaded to the wrong path is there an easy way to solve this?

I was just expecting Django to be installed.

using which pip3 shows the path to be:

which pip3                                                                ─╯
/opt/homebrew/bin/pip3

which should be correct for mac m1?

pip3 --version:

pip 24.0 from /opt/homebrew/lib/python3.12/site-packages/pip (python 3.12)

which I am guessing is a conflict?


Solution

  • No conflict here and everything works as expected. Since PEP668, python installations can be marked as externally-managed, meaning that they were installed using a package-manager (like brew) which prevents pip to install directly to them so that you don't have a mess of two package managers (brew and pip) somehow managing parts of the same python installation.

    The error message also gives the solution

    Use this code to create a virtual environment:

    python3 -m venv path/to/venv
    

    Use this code to install django and all other dependencies you need:

    source path/to/venv/bin/activate
    python3 -m pip install xyz
    

    and when you want to run a python script:

    source path/to/venv/bin/activate
    python3 /path/to/script.py
    

    Note that in each terminal, you only need to run the source ... line once