nickw444 / appdaemon-testing

Ergonomic and pythonic unit testing for AppDaemon apps
11 stars 4 forks source link

Fails to install with python 3.12 due to aiohttp and uvloop dependencies #13

Open paulwarwicker opened 5 months ago

paulwarwicker commented 5 months ago

Very useful for my testing but hasn't been updated in some time. Now fails with python 3.12.

What happens:

(venv) ~ # pip install appdaemon-testing 
Collecting appdaemon-testing
  Using cached appdaemon_testing-0.1.4-py3-none-any.whl.metadata (5.7 kB)
Collecting appdaemon (from appdaemon-testing)
  Using cached appdaemon-4.4.2-py3-none-any.whl.metadata (15 kB)
Collecting aiohttp~=3.8.4 (from appdaemon->appdaemon-testing)
  Using cached aiohttp-3.8.6.tar.gz (7.4 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting aiohttp-jinja2~=1.5.1 (from appdaemon->appdaemon-testing)
  Using cached aiohttp_jinja2-1.5.1-py3-none-any.whl.metadata (8.1 kB)
Collecting astral~=3.2 (from appdaemon->appdaemon-testing)
  Using cached astral-3.2-py3-none-any.whl.metadata (1.7 kB)
Collecting bcrypt~=4.0.1 (from appdaemon->appdaemon-testing)
  Using cached bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl.metadata (9.0 kB)
Collecting deepdiff==6.3.0 (from appdaemon->appdaemon-testing)
  Using cached deepdiff-6.3.0-py3-none-any.whl.metadata (4.7 kB)
Collecting feedparser~=6.0.10 (from appdaemon->appdaemon-testing)
  Using cached feedparser-6.0.11-py3-none-any.whl.metadata (2.4 kB)
Collecting iso8601~=1.1.0 (from appdaemon->appdaemon-testing)
  Using cached iso8601-1.1.0-py3-none-any.whl.metadata (9.8 kB)
Collecting paho-mqtt~=1.6.1 (from appdaemon->appdaemon-testing)
  Using cached paho_mqtt-1.6.1-py3-none-any.whl
Collecting pid~=3.0.4 (from appdaemon->appdaemon-testing)
  Using cached pid-3.0.4-py2.py3-none-any.whl.metadata (5.0 kB)
Collecting python-dateutil~=2.8.2 (from appdaemon->appdaemon-testing)
  Using cached python_dateutil-2.8.2-py2.py3-none-any.whl.metadata (8.2 kB)
Collecting python-socketio<5.9,>=5.5 (from appdaemon->appdaemon-testing)
  Using cached python_socketio-5.8.0-py3-none-any.whl.metadata (3.2 kB)
Collecting pytz<2023.4.0,>=2022.7.1 (from appdaemon->appdaemon-testing)
  Using cached pytz-2023.3.post1-py2.py3-none-any.whl.metadata (22 kB)
Collecting pyyaml~=6.0 (from appdaemon->appdaemon-testing)
  Using cached PyYAML-6.0.1-cp312-cp312-linux_aarch64.whl
Collecting requests~=2.28.2 (from appdaemon->appdaemon-testing)
  Using cached requests-2.28.2-py3-none-any.whl.metadata (4.6 kB)
Collecting sockjs~=0.11.0 (from appdaemon->appdaemon-testing)
  Using cached sockjs-0.11.0-py3-none-any.whl.metadata (5.4 kB)
Collecting websocket-client~=1.5.1 (from appdaemon->appdaemon-testing)
  Using cached websocket_client-1.5.3-py3-none-any.whl.metadata (7.6 kB)
Collecting tomli~=2.0.1 (from appdaemon->appdaemon-testing)
  Using cached tomli-2.0.1-py3-none-any.whl.metadata (8.9 kB)
Collecting tomli-w~=1.0.0 (from appdaemon->appdaemon-testing)
  Using cached tomli_w-1.0.0-py3-none-any.whl.metadata (4.9 kB)
Collecting uvloop==0.17.0 (from appdaemon->appdaemon-testing)
  Using cached uvloop-0.17.0.tar.gz (2.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting ordered-set<4.2.0,>=4.0.2 (from deepdiff==6.3.0->appdaemon->appdaemon-testing)
  Using cached ordered_set-4.1.0-py3-none-any.whl.metadata (5.3 kB)
Requirement already satisfied: attrs>=17.3.0 in ./venv/lib/python3.12/site-packages (from aiohttp~=3.8.4->appdaemon->appdaemon-testing) (23.2.0)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in ./venv/lib/python3.12/site-packages (from aiohttp~=3.8.4->appdaemon->appdaemon-testing) (3.3.2)
Requirement already satisfied: multidict<7.0,>=4.5 in ./venv/lib/python3.12/site-packages (from aiohttp~=3.8.4->appdaemon->appdaemon-testing) (6.0.5)
Collecting async-timeout<5.0,>=4.0.0a3 (from aiohttp~=3.8.4->appdaemon->appdaemon-testing)
  Using cached async_timeout-4.0.3-py3-none-any.whl.metadata (4.2 kB)
Requirement already satisfied: yarl<2.0,>=1.0 in ./venv/lib/python3.12/site-packages (from aiohttp~=3.8.4->appdaemon->appdaemon-testing) (1.9.4)
Requirement already satisfied: frozenlist>=1.1.1 in ./venv/lib/python3.12/site-packages (from aiohttp~=3.8.4->appdaemon->appdaemon-testing) (1.4.1)
Requirement already satisfied: aiosignal>=1.1.2 in ./venv/lib/python3.12/site-packages (from aiohttp~=3.8.4->appdaemon->appdaemon-testing) (1.3.1)
Collecting jinja2>=3.0.0 (from aiohttp-jinja2~=1.5.1->appdaemon->appdaemon-testing)
  Using cached jinja2-3.1.4-py3-none-any.whl.metadata (2.6 kB)
Collecting sgmllib3k (from feedparser~=6.0.10->appdaemon->appdaemon-testing)
  Using cached sgmllib3k-1.0.0-py3-none-any.whl
Requirement already satisfied: six>=1.5 in ./venv/lib/python3.12/site-packages (from python-dateutil~=2.8.2->appdaemon->appdaemon-testing) (1.16.0)
Collecting bidict>=0.21.0 (from python-socketio<5.9,>=5.5->appdaemon->appdaemon-testing)
  Using cached bidict-0.23.1-py3-none-any.whl.metadata (8.7 kB)
Collecting python-engineio>=4.3.0 (from python-socketio<5.9,>=5.5->appdaemon->appdaemon-testing)
  Using cached python_engineio-4.9.1-py3-none-any.whl.metadata (2.2 kB)
Requirement already satisfied: idna<4,>=2.5 in ./venv/lib/python3.12/site-packages (from requests~=2.28.2->appdaemon->appdaemon-testing) (3.7)
Collecting urllib3<1.27,>=1.21.1 (from requests~=2.28.2->appdaemon->appdaemon-testing)
  Using cached urllib3-1.26.18-py2.py3-none-any.whl.metadata (48 kB)
Requirement already satisfied: certifi>=2017.4.17 in ./venv/lib/python3.12/site-packages (from requests~=2.28.2->appdaemon->appdaemon-testing) (2024.2.2)
Collecting MarkupSafe>=2.0 (from jinja2>=3.0.0->aiohttp-jinja2~=1.5.1->appdaemon->appdaemon-testing)
  Using cached MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl.metadata (3.0 kB)
Collecting simple-websocket>=0.10.0 (from python-engineio>=4.3.0->python-socketio<5.9,>=5.5->appdaemon->appdaemon-testing)
  Using cached simple_websocket-1.0.0-py3-none-any.whl.metadata (1.3 kB)
Collecting wsproto (from simple-websocket>=0.10.0->python-engineio>=4.3.0->python-socketio<5.9,>=5.5->appdaemon->appdaemon-testing)
  Using cached wsproto-1.2.0-py3-none-any.whl.metadata (5.6 kB)
Collecting h11<1,>=0.9.0 (from wsproto->simple-websocket>=0.10.0->python-engineio>=4.3.0->python-socketio<5.9,>=5.5->appdaemon->appdaemon-testing)
  Using cached h11-0.14.0-py3-none-any.whl.metadata (8.2 kB)
Using cached appdaemon_testing-0.1.4-py3-none-any.whl (6.6 kB)
Using cached appdaemon-4.4.2-py3-none-any.whl (9.1 MB)
Using cached deepdiff-6.3.0-py3-none-any.whl (69 kB)
Using cached aiohttp_jinja2-1.5.1-py3-none-any.whl (11 kB)
Using cached astral-3.2-py3-none-any.whl (38 kB)
Using cached bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl (613 kB)
Using cached feedparser-6.0.11-py3-none-any.whl (81 kB)
Using cached iso8601-1.1.0-py3-none-any.whl (9.9 kB)
Using cached pid-3.0.4-py2.py3-none-any.whl (11 kB)
Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Using cached python_socketio-5.8.0-py3-none-any.whl (56 kB)
Using cached pytz-2023.3.post1-py2.py3-none-any.whl (502 kB)
Using cached requests-2.28.2-py3-none-any.whl (62 kB)
Using cached sockjs-0.11.0-py3-none-any.whl (23 kB)
Using cached tomli-2.0.1-py3-none-any.whl (12 kB)
Using cached tomli_w-1.0.0-py3-none-any.whl (6.0 kB)
Using cached websocket_client-1.5.3-py3-none-any.whl (56 kB)
Using cached async_timeout-4.0.3-py3-none-any.whl (5.7 kB)
Using cached bidict-0.23.1-py3-none-any.whl (32 kB)
Using cached jinja2-3.1.4-py3-none-any.whl (133 kB)
Using cached ordered_set-4.1.0-py3-none-any.whl (7.6 kB)
Using cached python_engineio-4.9.1-py3-none-any.whl (57 kB)
Using cached urllib3-1.26.18-py2.py3-none-any.whl (143 kB)
Using cached MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl (33 kB)
Using cached simple_websocket-1.0.0-py3-none-any.whl (13 kB)
Using cached wsproto-1.2.0-py3-none-any.whl (24 kB)
Using cached h11-0.14.0-py3-none-any.whl (58 kB)
Building wheels for collected packages: uvloop, aiohttp
  Building wheel for uvloop (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for uvloop (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [240 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-aarch64-cpython-312
      creating build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/_noop.py -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/__init__.py -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/_version.py -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/_testbase.py -> build/lib.linux-aarch64-cpython-312/uvloop
      running egg_info
      writing uvloop.egg-info/PKG-INFO
      writing dependency_links to uvloop.egg-info/dependency_links.txt
      writing requirements to uvloop.egg-info/requires.txt
      writing top-level names to uvloop.egg-info/top_level.txt
      reading manifest file 'uvloop.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      warning: no previously-included files matching '*' found under directory 'vendor/libuv/.git'
      warning: no previously-included files matching '*' found under directory 'vendor/libuv/docs'
      warning: no previously-included files matching '*' found under directory 'vendor/libuv/img'
      adding license file 'LICENSE-APACHE'
      adding license file 'LICENSE-MIT'
      writing manifest file 'uvloop.egg-info/SOURCES.txt'
      /tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/command/build_py.py:207: _Warning: Package 'uvloop.handles' is absent from the `packages` configuration.
      !!

              ********************************************************************************
              ############################
              # Package would be ignored #
              ############################
              Python recognizes 'uvloop.handles' as an importable package[^1],
              but it is absent from setuptools' `packages` configuration.

              This leads to an ambiguous overall configuration. If you want to distribute this
              package, please make sure that 'uvloop.handles' is explicitly added
              to the `packages` configuration field.

              Alternatively, you can also rely on setuptools' discovery methods
              (for example by using `find_namespace_packages(...)`/`find_namespace:`
              instead of `find_packages(...)`/`find:`).

              You can read more about "package discovery" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

              If you don't want 'uvloop.handles' to be distributed and are
              already explicitly excluding 'uvloop.handles' via
              `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
              you can try to use `exclude_package_data`, or `include-package-data=False` in
              combination with a more fine grained `package-data` configuration.

              You can read more about "package data files" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/datafiles.html

              [^1]: For Python, any directory (with suitable naming) can be imported,
                    even if it does not contain any `.py` files.
                    On the other hand, currently there is no concept of package data
                    directory, all directories are treated like packages.
              ********************************************************************************

      !!
        check.warn(importable)
      /tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/command/build_py.py:207: _Warning: Package 'uvloop.includes' is absent from the `packages` configuration.
      !!

              ********************************************************************************
              ############################
              # Package would be ignored #
              ############################
              Python recognizes 'uvloop.includes' as an importable package[^1],
              but it is absent from setuptools' `packages` configuration.

              This leads to an ambiguous overall configuration. If you want to distribute this
              package, please make sure that 'uvloop.includes' is explicitly added
              to the `packages` configuration field.

              Alternatively, you can also rely on setuptools' discovery methods
              (for example by using `find_namespace_packages(...)`/`find_namespace:`
              instead of `find_packages(...)`/`find:`).

              You can read more about "package discovery" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

              If you don't want 'uvloop.includes' to be distributed and are
              already explicitly excluding 'uvloop.includes' via
              `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
              you can try to use `exclude_package_data`, or `include-package-data=False` in
              combination with a more fine grained `package-data` configuration.

              You can read more about "package data files" on setuptools documentation page:

              - https://setuptools.pypa.io/en/latest/userguide/datafiles.html

              [^1]: For Python, any directory (with suitable naming) can be imported,
                    even if it does not contain any `.py` files.
                    On the other hand, currently there is no concept of package data
                    directory, all directories are treated like packages.
              ********************************************************************************

      !!
        check.warn(importable)
      copying uvloop/cbhandles.pxd -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/cbhandles.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/dns.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/errors.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/loop.c -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/loop.pxd -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/loop.pyi -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/loop.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/lru.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/pseudosock.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/py.typed -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/request.pxd -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/request.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/server.pxd -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/server.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/sslproto.pxd -> build/lib.linux-aarch64-cpython-312/uvloop
      copying uvloop/sslproto.pyx -> build/lib.linux-aarch64-cpython-312/uvloop
      creating build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/async_.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/async_.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/basetransport.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/basetransport.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/check.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/check.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/fsevent.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/fsevent.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/handle.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/handle.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/idle.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/idle.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/pipe.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/pipe.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/poll.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/poll.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/process.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/process.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/stream.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/stream.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/streamserver.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/streamserver.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/tcp.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/tcp.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/timer.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/timer.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/udp.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      copying uvloop/handles/udp.pyx -> build/lib.linux-aarch64-cpython-312/uvloop/handles
      creating build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/__init__.py -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/compat.h -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/consts.pxi -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/debug.h -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/debug.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/flowcontrol.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/fork_handler.h -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/python.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/stdlib.pxi -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/system.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      copying uvloop/includes/uv.pxd -> build/lib.linux-aarch64-cpython-312/uvloop/includes
      running build_ext
      checking for a BSD-compatible install... /usr/bin/install -c
      checking whether build environment is sane... yes
      checking for a race-free mkdir -p... ./install-sh -c -d
      checking for gawk... no
      checking for mawk... no
      checking for nawk... no
      checking for awk... awk
      checking whether make sets $(MAKE)... no
      checking whether make supports nested variables... no
      checking build system type... aarch64-unknown-linux-musl
      checking host system type... aarch64-unknown-linux-musl
      checking for gcc... no
      checking for cc... no
      checking for cl.exe... no
      checking for clang... no
      configure: error: in `/tmp/pip-install-qsgkb5fp/uvloop_a29779dd9b9c4630ae7392c4a6538141/build/libuv-aarch64':
      configure: error: no acceptable C compiler found in $PATH
      See `config.log' for more details
      Traceback (most recent call last):
        File "/root/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/root/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/root/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 251, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 410, in build_wheel
          return self._build_with_temp_dir(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 395, in _build_with_temp_dir
          self.run_setup()
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 487, in run_setup
          super().run_setup(setup_script=setup_script)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 311, in run_setup
          exec(code, locals())
        File "<string>", line 272, in <module>
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 103, in setup
          return distutils.core.setup(**attrs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 184, in setup
          return run_commands(dist)
                 ^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 200, in run_commands
          dist.run_commands()
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
          self.run_command(cmd)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/tmp/pip-build-env-n9xaeb6y/normal/lib/python3.12/site-packages/wheel/bdist_wheel.py", line 368, in run
          self.run_command("build")
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build.py", line 132, in run
          self.run_command(cmd_name)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/command/build_ext.py", line 91, in run
          _build_ext.run(self)
        File "/tmp/pip-build-env-n9xaeb6y/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 359, in run
          self.build_extensions()
        File "<string>", line 231, in build_extensions
        File "<string>", line 210, in build_libuv
        File "/usr/lib/python3.12/subprocess.py", line 571, in run
          raise CalledProcessError(retcode, process.args,
      subprocess.CalledProcessError: Command '['./configure']' returned non-zero exit status 1.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for uvloop
  Building wheel for aiohttp (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for aiohttp (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [97 lines of output]
      *********************
      * Accelerated build *
      *********************
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-aarch64-cpython-312
      creating build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_exceptions.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/abc.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/helpers.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/cookiejar.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_request.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_protocol.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/tcp_helpers.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_response.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_urldispatcher.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_app.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/client.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/typedefs.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/http_parser.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/pytest_plugin.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_middlewares.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_routedef.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/client_ws.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/tracing.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_server.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/hdrs.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/formdata.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/payload_streamer.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_ws.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/resolver.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/http_exceptions.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/connector.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/payload.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/__init__.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/log.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/test_utils.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_fileresponse.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/client_reqrep.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/client_proto.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_log.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/streams.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/base_protocol.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/locks.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/worker.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/multipart.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/http_websocket.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/http.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/http_writer.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/client_exceptions.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/web_runner.py -> build/lib.linux-aarch64-cpython-312/aiohttp
      running egg_info
      writing aiohttp.egg-info/PKG-INFO
      writing dependency_links to aiohttp.egg-info/dependency_links.txt
      writing requirements to aiohttp.egg-info/requires.txt
      writing top-level names to aiohttp.egg-info/top_level.txt
      reading manifest file 'aiohttp.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      warning: no files found matching 'aiohttp' anywhere in distribution
      warning: no previously-included files matching '*.pyc' found anywhere in distribution
      warning: no previously-included files matching '*.pyd' found anywhere in distribution
      warning: no previously-included files matching '*.so' found anywhere in distribution
      warning: no previously-included files matching '*.lib' found anywhere in distribution
      warning: no previously-included files matching '*.dll' found anywhere in distribution
      warning: no previously-included files matching '*.a' found anywhere in distribution
      warning: no previously-included files matching '*.obj' found anywhere in distribution
      warning: no previously-included files found matching 'aiohttp/*.html'
      no previously-included directories found matching 'docs/_build'
      adding license file 'LICENSE.txt'
      writing manifest file 'aiohttp.egg-info/SOURCES.txt'
      copying aiohttp/_cparser.pxd -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/_find_header.pxd -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/_headers.pxi -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/_helpers.pyi -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/_helpers.pyx -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/_http_parser.pyx -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/_http_writer.pyx -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/_websocket.pyx -> build/lib.linux-aarch64-cpython-312/aiohttp
      copying aiohttp/py.typed -> build/lib.linux-aarch64-cpython-312/aiohttp
      creating build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      copying aiohttp/.hash/_cparser.pxd.hash -> build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      copying aiohttp/.hash/_find_header.pxd.hash -> build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      copying aiohttp/.hash/_helpers.pyi.hash -> build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      copying aiohttp/.hash/_helpers.pyx.hash -> build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      copying aiohttp/.hash/_http_parser.pyx.hash -> build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      copying aiohttp/.hash/_http_writer.pyx.hash -> build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      copying aiohttp/.hash/_websocket.pyx.hash -> build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      copying aiohttp/.hash/hdrs.py.hash -> build/lib.linux-aarch64-cpython-312/aiohttp/.hash
      running build_ext
      building 'aiohttp._websocket' extension
      creating build/temp.linux-aarch64-cpython-312
      creating build/temp.linux-aarch64-cpython-312/aiohttp
      gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -I/root/venv/include -I/usr/include/python3.12 -c aiohttp/_websocket.c -o build/temp.linux-aarch64-cpython-312/aiohttp/_websocket.o
      error: command 'gcc' failed: No such file or directory
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for aiohttp
Failed to build uvloop aiohttp
ERROR: Could not build wheels for uvloop, aiohttp, which is required to install pyproject.toml-based projects
(venv) ~ # 

uvloop version 0.19.0 and aiohttp 3.9.0 will build independently.

Any chance of a refresh or a clue as to what needs to change?

Thanks -paul

paulwarwicker commented 5 months ago

https://github.com/aio-libs/aiohttp/issues/7739 https://github.com/MagicStack/uvloop/issues/567

TickTockGoesTheClock commented 2 months ago

Were you able to resolve the issue? As I'm using the similar Appdaemon-Test-Framework package, which fails to install, I cannot test my automations.

paulwarwicker commented 2 months ago

@TickTockGoesTheClock not easily. i had to craft an environment where appdaemon-testing could run but i have to jump through several hoops to get there.

what i had to do is create a docker image which has an older version of python. currently i'm using 3.8.19. then i have to run that docker image taking the volumes from appdaemon. i'm using HAOS with appdaemon as an add-on. it installs pyenv and creates a venv with pytest-freezer, ics, arrow, pytest, requests and appdaemon-testing. these are prerequisites for my environment.

i can imagine it may have been abandoned unless @nickw444 replies. shame really because appdaemon-testing is very good. i haven't found anything better but unfortunately i'm not up to making the necessary changes myself.

-paul

TickTockGoesTheClock commented 2 months ago

Well done. I think the road was bumpy, but you made it.

Right before your reply, I started to migrate my AppDaemon HA addon to an own docker image. HA runs in a proxmox and right next to HA, I deployed a fresh LXC with docker. There runs now Appdaemon as a container. I made the switch 30min ago. Turned the HA addon off and started the AD container. To test the code with pytest, I ssh into the docker LXC with VS Code, installed all requirements and necessary packages via pip and adjusted the python interpreter in VS Code.

Would I have migrated if pytest still had worked in the HA addon? Certainly no.

cheers

nickw444 commented 2 months ago

i can imagine it may have been abandoned unless @nickw444 replies. shame really because appdaemon-testing is very good.

Not abandoned, but my personal time these days is rather limited, and I have mostly migrated away from Appdaemon for automations to prefer simple automations within Home Assistant, hence less of a need to maintain this personally.

That said, I am more than happy to add a willing maintainer to the repo who can manage improvements incoming pull requests.

paulwarwicker commented 2 months ago

@nickw444 thanks for the reply. genuinely pleased to hear from you and totally understandable.

i am definitely keen but i just doubt my ability right now. i'm off on holiday shortly and will read around the subject as i had considered maintaining a fork. i will drop you an email from my personal account.

cheers -paul

raarts commented 1 week ago

Anxiously awaiting what comes out of this..