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?
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