Pip refuses installation for packages that should be managed externally (PEP-668)
Due to restrictions in new pip
(See: https://peps.python.org/pep-0668/#marking-an-interpreter-as-using-an-external-package-manager)
The CI pipeline fails on following error:
$ pip install wheel
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.
I came across two possible solutions
- install wheel, tox and cookiecutter in image
- add parameter to each pip install
--break-system-packages
parameter ingitlab-ci.yml
in quick and dirty style - install in
venv
Since we use tox
anyway, I don't really see why'd we do in venv
. And all the packages are not for production anyway, so I don't see any caveats for fast dirty hack. (Solution 2)