RoboStack/ros-humble

Python 3.8 compatibility with ROS2 humble robostack

hanschanhs opened this issue · 3 comments

Solution to issue cannot be found in the documentation.

  • I checked the documentation.

Issue

I expect ROS2 humble to be compatible with python 3.8. Yet when I follow the instructions to install Robostack on a mamba env with python 3.8, mamba could not solve for environment specs and asks for python 3.10. I require python 3.8 for other python libraries to function on an nvidia jetson orin (I am aware that nvidia offers docker containers for ros, but honestly Robostack has worked very well for me so far when mamba env with python=3.10 was used).

Platfrom: Nvidia Jetson Orin dev board, Jetpack 5.1.2 (Ubuntu 20.04)

Issue: after adding all the necessary channels to the environment, running

mamba install ros-humble-desktop

on a mamba 1.4.2 environment with python=3.8.17 installed, returns the following:

Could not solve for environment specs
The following package could not be installed
└─ ros-humble-desktop   is installable and it requires
   ├─ python_abi 3.10.* *_cp310 with the potential options
   │  ├─ python_abi 3.10, which can be installed;
   │  └─ python_abi 3.10 would require
   │     └─ python 3.10.* , which can be installed;
   └─ ros2-distro-mutex [0.2.* humble|0.3.* ], which requires
      └─ setuptools 61.0.0* , which can be installed.

Expected result: backwards compatibility of ros-humble-desktop in mamba, at least to python 3.8.

Thanks a lot in advance!

Installed packages

_openmp_mutex             4.5                       2_gnu    conda-forge
aiofiles                  23.2.1                   pypi_0    pypi
aiohttp                   3.8.5                    pypi_0    pypi
aiosignal                 1.3.1                    pypi_0    pypi
altair                    5.0.1                    pypi_0    pypi
annotated-types           0.5.0                    pypi_0    pypi
anyio                     3.7.1                    pypi_0    pypi
asttokens                 2.2.1                    pypi_0    pypi
async-timeout             4.0.3                    pypi_0    pypi
attrs                     23.1.0                   pypi_0    pypi
backcall                  0.2.0                    pypi_0    pypi
bzip2                     1.0.8                hf897c2e_4    conda-forge
ca-certificates           2023.7.22            hcefe29a_0    conda-forge
certifi                   2023.7.22                pypi_0    pypi
charset-normalizer        3.2.0                    pypi_0    pypi
click                     8.1.7                    pypi_0    pypi
clip                      1.0                      pypi_0    pypi
comm                      0.1.4                    pypi_0    pypi
contourpy                 1.1.0                    pypi_0    pypi
cycler                    0.11.0                   pypi_0    pypi
debugpy                   1.6.7.post1              pypi_0    pypi
decorator                 5.1.1                    pypi_0    pypi
executing                 1.2.0                    pypi_0    pypi
fastapi                   0.101.1                  pypi_0    pypi
ffmpy                     0.3.1                    pypi_0    pypi
filelock                  3.12.2                   pypi_0    pypi
fonttools                 4.42.1                   pypi_0    pypi
frozenlist                1.4.0                    pypi_0    pypi
fsspec                    2023.6.0                 pypi_0    pypi
ftfy                      6.1.1                    pypi_0    pypi
gradio                    3.35.2                   pypi_0    pypi
gradio-client             0.5.0                    pypi_0    pypi
h11                       0.14.0                   pypi_0    pypi
httpcore                  0.17.3                   pypi_0    pypi
httpx                     0.24.1                   pypi_0    pypi
huggingface-hub           0.16.4                   pypi_0    pypi
idna                      3.4                      pypi_0    pypi
importlib-metadata        6.8.0                    pypi_0    pypi
importlib-resources       6.0.1                    pypi_0    pypi
ipykernel                 6.25.1                   pypi_0    pypi
ipython                   8.12.2                   pypi_0    pypi
jedi                      0.19.0                   pypi_0    pypi
jinja2                    3.1.2                    pypi_0    pypi
jsonschema                4.19.0                   pypi_0    pypi
jsonschema-specifications 2023.7.1                 pypi_0    pypi
jupyter-client            8.3.0                    pypi_0    pypi
jupyter-core              5.3.1                    pypi_0    pypi
kiwisolver                1.4.5                    pypi_0    pypi
ld_impl_linux-aarch64     2.40                 h2d8c526_0    conda-forge
libffi                    3.4.2                h3557bc0_5    conda-forge
libgcc-ng                 13.1.0               h2b4548d_0    conda-forge
libgomp                   13.1.0               h2b4548d_0    conda-forge
libnsl                    2.0.0                hf897c2e_0    conda-forge
libsqlite                 3.43.0               h194ca79_0    conda-forge
libuuid                   2.38.1               hb4cce97_0    conda-forge
libzlib                   1.2.13               h31becfc_5    conda-forge
linkify-it-py             2.0.2                    pypi_0    pypi
markdown-it-py            2.2.0                    pypi_0    pypi
markupsafe                2.1.3                    pypi_0    pypi
matplotlib                3.7.2                    pypi_0    pypi
matplotlib-inline         0.1.6                    pypi_0    pypi
mdit-py-plugins           0.3.3                    pypi_0    pypi
mdurl                     0.1.2                    pypi_0    pypi
mpmath                    1.3.0                    pypi_0    pypi
multidict                 6.0.4                    pypi_0    pypi
ncurses                   6.4                  h2e1726e_0    conda-forge
nest-asyncio              1.5.7                    pypi_0    pypi
networkx                  3.1                      pypi_0    pypi
numpy                     1.24.4                   pypi_0    pypi
opencv-python             4.8.0.76                 pypi_0    pypi
openssl                   3.1.2                h31becfc_0    conda-forge
orjson                    3.9.5                    pypi_0    pypi
packaging                 23.1                     pypi_0    pypi
pandas                    2.0.3                    pypi_0    pypi
parso                     0.8.3                    pypi_0    pypi
pexpect                   4.8.0                    pypi_0    pypi
pickleshare               0.7.5                    pypi_0    pypi
pillow                    10.0.0                   pypi_0    pypi
pip                       23.2.1             pyhd8ed1ab_0    conda-forge
pkgutil-resolve-name      1.3.10                   pypi_0    pypi
platformdirs              3.10.0                   pypi_0    pypi
pluggy                    1.2.0                    pypi_0    pypi
prompt-toolkit            3.0.39                   pypi_0    pypi
protobuf                  4.24.1                   pypi_0    pypi
psutil                    5.9.5                    pypi_0    pypi
ptyprocess                0.7.0                    pypi_0    pypi
pure-eval                 0.2.2                    pypi_0    pypi
pydantic                  2.3.0                    pypi_0    pypi
pydantic-core             2.6.3                    pypi_0    pypi
pydub                     0.25.1                   pypi_0    pypi
pygments                  2.16.1                   pypi_0    pypi
pyparsing                 3.0.9                    pypi_0    pypi
python                    3.8.17          ha43d526_0_cpython    conda-forge
python-dateutil           2.8.2                    pypi_0    pypi
python-multipart          0.0.6                    pypi_0    pypi
pytz                      2023.3                   pypi_0    pypi
pyyaml                    6.0.1                    pypi_0    pypi
pyzmq                     25.1.1                   pypi_0    pypi
readline                  8.2                  h8fc344f_1    conda-forge
referencing               0.30.2                   pypi_0    pypi
regex                     2023.8.8                 pypi_0    pypi
requests                  2.31.0                   pypi_0    pypi
rpds-py                   0.9.2                    pypi_0    pypi
scipy                     1.10.1                   pypi_0    pypi
seaborn                   0.12.2                   pypi_0    pypi
segment-anything          1.0                      pypi_0    pypi
semantic-version          2.10.0                   pypi_0    pypi
setuptools                68.1.2             pyhd8ed1ab_0    conda-forge
six                       1.16.0                   pypi_0    pypi
sniffio                   1.3.0                    pypi_0    pypi
stack-data                0.6.2                    pypi_0    pypi
starlette                 0.27.0                   pypi_0    pypi
sympy                     1.12                     pypi_0    pypi
tk                        8.6.12               hd8af866_0    conda-forge
toolz                     0.12.0                   pypi_0    pypi
torch                     2.0.0+nv23.5             pypi_0    pypi
torchvision               0.14.0                   pypi_0    pypi
tornado                   6.3.3                    pypi_0    pypi
tqdm                      4.66.1                   pypi_0    pypi
traitlets                 5.9.0                    pypi_0    pypi
typing-extensions         4.7.1                    pypi_0    pypi
tzdata                    2023.3                   pypi_0    pypi
uc-micro-py               1.0.2                    pypi_0    pypi
ultralytics               8.0.120                  pypi_0    pypi
urllib3                   2.0.4                    pypi_0    pypi
uvicorn                   0.23.2                   pypi_0    pypi
wcwidth                   0.2.6                    pypi_0    pypi
websockets                11.0.3                   pypi_0    pypi
wheel                     0.41.2             pyhd8ed1ab_0    conda-forge
xz                        5.2.6                h9cdd2b7_0    conda-forge
yarl                      1.9.2                    pypi_0    pypi
zipp                      3.16.2                   pypi_0    pypi

Environment info

active environment : ros2_env
    active env location : <home>/mambaforge/envs/ros2_env
            shell level : 2
       user config file : <home>/.condarc
 populated config files : <home>/mambaforge/.condarc
                          <home>/mambaforge/envs/ros2_env/.condarc
          conda version : 23.3.1
    conda-build version : not installed
         python version : 3.10.12.final.0
       virtual packages : __archspec=1=aarch64
                          __cuda=11.4=0
                          __glibc=2.31=0
                          __linux=5.10.104=0
                          __unix=0=0
       base environment : <home>/mambaforge  (writable)
      conda av data dir : <home>/mambaforge/etc/conda
  conda av metadata url : None
           channel URLs : https://conda.anaconda.org/robostack-staging/linux-aarch64
                          https://conda.anaconda.org/robostack-staging/noarch
                          https://conda.anaconda.org/conda-forge/linux-aarch64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : <home>/mambaforge/pkgs
                          <home>/.conda/pkgs
       envs directories : <home>/mambaforge/envs
                          <home>/.conda/envs
               platform : linux-aarch64
             user-agent : conda/23.3.1 requests/2.31.0 CPython/3.10.12 Linux/5.10.104-tegra ubuntu/20.04.6 glibc/2.31
                UID:GID : 1000:1000
             netrc file : None
           offline mode : False

At the moment, we build for a single version of Python for each distribution to keep the mantainance burden managiable. It was Python 3.9 before #21, and now it is Python 3.10 . See also RoboStack/ros-noetic#386 (comment) for a similar issue with ROS Noetic.

Thanks for the prompt reply - I see. Given the almost simultaneous request from RoboStack/ros-noetic#386 (comment) are there plans for backwards compatibility for the ros versions on robostack to at least python 3.8? I understand it is a lot of work but certainly many robotics-relevant e.g. computer vision, ML python packages share compatibility to latest python 3.8 so I am sure many will find this useful. A big appeal of robostack has been that we didn't have to mess around with e.g. docker to get LTS ros2 humble working, so would be a critical differentiating feature/unique selling point of robostack if enabled.

In the meantime, do you have any suggested workarounds? E.g. having two mamba environments one with python3.10 + robostack and one with python3.8 + my other dependencies will probably struggle to work.

Hi @hanschanhs, great to see you are interested in RoboStack and giving it a go :).

Unfortunately, as @traversaro said above, the maintenance burden is too high for us to support multiple Python versions (the build time multiplies by the number of Python versions).

That said, there are multiple ways to potentially achieve what you like:

  • You could build RoboStack for a particular Python locally. This should be quite straightforward, see our contribution guide. In fact, our users have done this for Python 3.11 (ROS noetic, see RoboStack/ros-noetic#339).
  • You could help us bring the computer vision / ML packages that are still missing to conda-forge, which supports python 3.9 (and underlies RoboStack). We are happy to help out to get you started; the RoboStack team probably maintains >100 packages in robotics/ML/CV. Let us know which particular packages require Python 3.8.
  • If you work for a company, you could ask them to sponsor RoboStack. If we had money for more powerful CI, we could support multiple Python versions.