ros-infrastructure / rosdep

rosdep multi-package manager system dependency tool
http://ros.org/wiki/rosdep
BSD 3-Clause "New" or "Revised" License
77 stars 170 forks source link

Add --break-system-packages to pip install on python 3.11+ #977

Closed InvincibleRMC closed 3 months ago

InvincibleRMC commented 4 months ago

Currently on python 3.11+ install a pip package crashes rosdep with the following error

  executing command [pip3 install -U -q pytest-qt]
  WARNING: Skipping /usr/lib/python3.12/dist-packages/argcomplete-3.1.4.dist-info due to invalid metadata entry 'name'
  WARNING: Skipping /usr/lib/python3.12/dist-packages/argcomplete-3.1.4.dist-info due to invalid metadata entry 'name'
  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.12/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.
  hint: See PEP 668 for the detailed specification.
  ERROR: the following rosdeps failed to install
    pip: command [pip3 install -U -q pytest-qt] failed

In the future https://github.com/ros2/ros2/pull/1524 could support virtual environments as well as updating rosdep to support them after that issue gets resolved. However in the interim I added the --break-system-packages to python3.11+.

Closes #978

nuclearsandwich commented 3 months ago

Thanks for the PR. I feel pretty strongly that this is a decision each user should be made aware of and opt into by setting this configuration value themselves, even though rosdep will require it.

Disruptive though it is, the Python packaging team and package manager maintainers in operating system distributions have motivations for enacting this change and warning and I do not think it's appropriate for rosdep to squelch the error without communicating the potential impact to users. I've opened #979 which checks for the break-system-packages configuration and attempts to warn the user if it's not enabled.