pythonpipraspbian-buster

PIP Install uamqp on a RaspberryPi


I'm having problems trying to install the package azure-eventhub on a Docker container running on a RaspberryPi using the image python:3.10.1-buster. The issue (as far as I can see) isn't with the azure-eventhub package however but one of the dependencies uamqp.

My Dockerfile (part of it) looks like this:

ROM python:3.10.1-buster
WORKDIR /usr/src/app
RUN pip install --upgrade pip
RUN pip install uamqp==1.5.1
RUN pip install azure-eventhub

I have also tried adding this to my Dockerfile but it has made no difference:

RUN apt install -y libxml2-dev libz-dev python-dev python3-dev build-essential

The error I then get is:

ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-_59w4hrm/uamqp_1c72baf900324ec6bf3230a15fef7884/setup.py'"'"'; __file__='"'"'/tmp/pip-install-_59w4hrm/uamqp_1c72baf900324ec6bf3230a15fef7884/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-e1c5r5_w/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.10/uamqp Check the logs for full command output.

Has anyone experienced this before? Is it possible to run uamqp on a RaspberryPi? - looking here it should be possible - https://pypi.org/project/uamqp/. With my very limited understanding of pip the .whl for Buster should exist and there wouldn't be a need for it to build from the source?

The full error message is:

ERROR: Failed building wheel for uamqp
Running setup.py clean for uamqp
Failed to build uamqp
Installing collected packages: six, certifi, uamqp
    Running setup.py install for uamqp: started
    Running setup.py install for uamqp: finished with status 'error'
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/setup.py'"'"'; __file__='"'"'/tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-i2ybrfl_/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.10/uamqp
         cwd: /tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/
    Complete output (81 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-armv7l-3.10
    creating build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/errors.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/connection.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/sender.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/utils.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/compat.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/address.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/constants.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/message.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/mgmt_operation.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/types.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/client.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/receiver.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/__init__.py -> build/lib.linux-armv7l-3.10/uamqp
    copying uamqp/session.py -> build/lib.linux-armv7l-3.10/uamqp
    creating build/lib.linux-armv7l-3.10/uamqp/async_ops
    copying uamqp/async_ops/utils.py -> build/lib.linux-armv7l-3.10/uamqp/async_ops
    copying uamqp/async_ops/receiver_async.py -> build/lib.linux-armv7l-3.10/uamqp/async_ops
    copying uamqp/async_ops/mgmt_operation_async.py -> build/lib.linux-armv7l-3.10/uamqp/async_ops
    copying uamqp/async_ops/client_async.py -> build/lib.linux-armv7l-3.10/uamqp/async_ops
    copying uamqp/async_ops/sender_async.py -> build/lib.linux-armv7l-3.10/uamqp/async_ops
    copying uamqp/async_ops/session_async.py -> build/lib.linux-armv7l-3.10/uamqp/async_ops
    copying uamqp/async_ops/__init__.py -> build/lib.linux-armv7l-3.10/uamqp/async_ops
    copying uamqp/async_ops/connection_async.py -> build/lib.linux-armv7l-3.10/uamqp/async_ops
    creating build/lib.linux-armv7l-3.10/uamqp/authentication
    copying uamqp/authentication/cbs_auth.py -> build/lib.linux-armv7l-3.10/uamqp/authentication
    copying uamqp/authentication/cbs_auth_async.py -> build/lib.linux-armv7l-3.10/uamqp/authentication
    copying uamqp/authentication/common.py -> build/lib.linux-armv7l-3.10/uamqp/authentication
    copying uamqp/authentication/__init__.py -> build/lib.linux-armv7l-3.10/uamqp/authentication
    running egg_info
    writing uamqp.egg-info/PKG-INFO
    writing dependency_links to uamqp.egg-info/dependency_links.txt
    writing requirements to uamqp.egg-info/requires.txt
    writing top-level names to uamqp.egg-info/top_level.txt
    reading manifest file 'uamqp.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    writing manifest file 'uamqp.egg-info/SOURCES.txt'
    copying uamqp/c_uamqp.c -> build/lib.linux-armv7l-3.10/uamqp
    running build_ext
    will build uamqp in build/temp.linux-armv7l-3.10/cmake
    Building with generator flags: -G "Unix Makefiles"
    calling cmake /tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/src/vendor/azure-uamqp-c/ -G "Unix Makefiles" -Duse_openssl:bool=ON -Duse_default_uuid:bool=ON  -Duse_builtin_httpapi:bool=ON  -Dskip_samples:bool=ON -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCMAKE_BUILD_TYPE=Release
    /bin/sh: 1: cmake: not found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/setup.py", line 260, in <module>
        setup(
      File "/usr/local/lib/python3.10/site-packages/setuptools/__init__.py", line 153, in setup
        return distutils.core.setup(**attrs)
      File "/usr/local/lib/python3.10/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/usr/local/lib/python3.10/distutils/dist.py", line 966, in run_commands
        self.run_command(cmd)
      File "/usr/local/lib/python3.10/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/usr/local/lib/python3.10/site-packages/setuptools/command/install.py", line 61, in run
        return orig.install.run(self)
      File "/usr/local/lib/python3.10/distutils/command/install.py", line 568, in run
        self.run_command('build')
      File "/usr/local/lib/python3.10/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/usr/local/lib/python3.10/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/usr/local/lib/python3.10/distutils/command/build.py", line 135, in run
        self.run_command(cmd_name)
      File "/usr/local/lib/python3.10/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/usr/local/lib/python3.10/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/setup.py", line 134, in run
        self.build_cmake(ext)
      File "/tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/setup.py", line 183, in build_cmake
        subprocess.check_call(joined_cmd, shell=True, universal_newlines=True, env=build_env)
      File "/usr/local/lib/python3.10/subprocess.py", line 369, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command 'cmake /tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/src/vendor/azure-uamqp-c/ -G "Unix Makefiles" -Duse_openssl:bool=ON -Duse_default_uuid:bool=ON  -Duse_builtin_httpapi:bool=ON  -Dskip_samples:bool=ON -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCMAKE_BUILD_TYPE=Release' returned non-zero exit status 127.
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/setup.py'"'"'; __file__='"'"'/tmp/pip-install-wwy1yi07/uamqp_4f9f8d7115bb406f8fbd7b4f40cfc01c/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-i2ybrfl_/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.10/uamqp Check the logs for full command output.

Thank you in advance :)


Solution

  • In the error message, we can see

    /bin/sh: 1: cmake: not found
    

    So you are lacking cmake which you should be able to install with

    RUN apt install -y cmake