Skip to content

Support for Python 3.14 on ubuntu #11503

@jonathan343

Description

@jonathan343

Overview

Hey team, sorry if this is a duplicate but I didn't see any other related issue.

Per PEP 0745, Python 3.14 is scheduled to release next month on 2025-10-07. I noticed our repo's CI failing when trying to run on 3.14-dev and discovered it was due to not being able to install aiohttp on ubuntu when using Python 3.14.

Is there ongoing work or a timeline for getting this issue resolved? Would appreciate any update here, thank you!

Reproduction Steps

Try to install aiohttp using Python 3.14 on an ubuntu machine:

ubuntu@ip-172-31-28-218:~$ uv venv -p 3.14
Using CPython 3.14.0rc2 interpreter at: .local/bin/python3.14
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
ubuntu@ip-172-31-28-218:~$ . .venv/bin/activate
(ubuntu) ubuntu@ip-172-31-28-218:~$ uv pip install aiohttp
Resolved 9 packages in 132ms
  × Failed to build `aiohttp==3.12.15`
  ├─▶ The build backend returned an error
  ╰─▶ Call to `setuptools.build_meta.build_wheel` failed (exit status: 1)

      [stdout]
      running bdist_wheel
      running build
      running build_py
      copying aiohttp/client_middlewares.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/http_exceptions.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/typedefs.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/__init__.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/multipart.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/worker.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/streams.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_middlewares.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/http_websocket.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/base_protocol.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_app.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/resolver.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/cookiejar.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_urldispatcher.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/client_exceptions.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/payload.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/abc.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/_cookie_helpers.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_routedef.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_server.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_protocol.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/formdata.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/hdrs.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_request.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/client_proto.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/tracing.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/tcp_helpers.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_fileresponse.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/http.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/pytest_plugin.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/http_parser.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/compression_utils.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/client_middleware_digest_auth.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/log.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_runner.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_log.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/test_utils.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/client_ws.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_exceptions.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/payload_streamer.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/client.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/helpers.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_response.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/http_writer.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/web_ws.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/connector.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/client_reqrep.py -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/_websocket/__init__.py -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/models.py -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/reader_c.py -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/helpers.py -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/writer.py -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/reader.py -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/reader_py.py -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      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'
      adding license file 'LICENSE.txt'
      adding license file 'vendor/llhttp/LICENSE'
      writing manifest file 'aiohttp.egg-info/SOURCES.txt'
      copying aiohttp/_cparser.pxd -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/_find_header.pxd -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/_headers.pxi -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/_http_parser.pyx -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/_http_writer.pyx -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/py.typed -> build/lib.linux-x86_64-cpython-314/aiohttp
      copying aiohttp/.hash/_cparser.pxd.hash -> build/lib.linux-x86_64-cpython-314/aiohttp/.hash
      copying aiohttp/.hash/_find_header.pxd.hash -> build/lib.linux-x86_64-cpython-314/aiohttp/.hash
      copying aiohttp/.hash/_http_parser.pyx.hash -> build/lib.linux-x86_64-cpython-314/aiohttp/.hash
      copying aiohttp/.hash/_http_writer.pyx.hash -> build/lib.linux-x86_64-cpython-314/aiohttp/.hash
      copying aiohttp/.hash/hdrs.py.hash -> build/lib.linux-x86_64-cpython-314/aiohttp/.hash
      copying aiohttp/_websocket/mask.pxd -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/mask.pyx -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/reader_c.pxd -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket
      copying aiohttp/_websocket/.hash/mask.pxd.hash -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket/.hash
      copying aiohttp/_websocket/.hash/mask.pyx.hash -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket/.hash
      copying aiohttp/_websocket/.hash/reader_c.pxd.hash -> build/lib.linux-x86_64-cpython-314/aiohttp/_websocket/.hash
      running build_ext
      building 'aiohttp._websocket.mask' extension
      cc -pthread -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -fPIC -fPIC -I/home/ubuntu/.cache/uv/builds-v0/.tmplRRJVM/include -I/home/ubuntu/.local/share/uv/python/cpython-3.14.0rc2-linux-x86_64-gnu/include/python3.14
      -c aiohttp/_websocket/mask.c -o build/temp.linux-x86_64-cpython-314/aiohttp/_websocket/mask.o

      [stderr]
      *********************
      * Accelerated build *
      *********************
      warning: no files found matching 'aiohttp' anywhere in distribution
      warning: no files found matching '*.pyi' 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'
      error: command 'cc' failed: No such file or directory

      hint: This usually indicates a problem with the package or the build environment.

Describe the solution you'd like

Aiohttp to be installable using Python 3.14 on ubuntu.

Describe alternatives you've considered

N/A

Related component

Client

Additional context

No response

Code of Conduct

  • I agree to follow the aio-libs Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions