Skip to content

Workaround externally managed environment issue in Python 3.11 #150

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

gene1wood
Copy link

Around the beginning of 2025, the ubuntu-latest runner image which this project uses, was changed from Ubuntu 22.04 to 24.04.

As a result, the python version which is used by this repo's GitHub actions changed from 3.10.12 to 3.12.3.

With this change to Python 3.12, PEP 668 was introduced. This new Python behavior is causing errors in the CI and pip is exiting non-zero

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.13/README.venv for more information.

This adds a --break-system-packages argument to the pip install so that it can continue to install packages without an error.

A possible future improvement would be to do these installations in a virtual environment.

gene1wood added 3 commits July 5, 2025 13:23
Around the beginning of 2025, the `ubuntu-latest` runner image
which [this project uses][1], [was changed from Ubuntu 22.04 to 24.04][2].

As a result, the python version which is used by this repo's GitHub actions
changed from [3.10.12][3] to [3.12.3][4].

With this change to Python 3.12, [PEP 668][5] was introduced. This new Python
behavior is causing errors in the CI and `pip` is exiting non-zero

```
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.13/README.venv for more information.
```

This adds a `--break-system-packages` argument to the `pip install` so that
it can continue to install packages without an error.

A possible future improvement would be to do these installations in a virtual
environment.

[1]: https://github.com/systemd/python-systemd/blob/903142423452c4dd18110b7f8a953dabb2031e49/.github/workflows/install.yml#L17
[2]: actions/runner-images#10636
[3]: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md#installed-software
[4]: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md#language-and-runtime
[5]: https://peps.python.org/pep-0668/
@gene1wood
Copy link
Author

It looks like the CI is a bit out of date. I'll close this PR and come up with another one that fixes all of the CI issues.

@gene1wood gene1wood closed this Jul 5, 2025
@gene1wood gene1wood deleted the fix_externally-managed-environment_error branch July 5, 2025 20:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

1 participant