Skip to content

Build Python 3.14 wheels#419

Open
septatrix wants to merge 2 commits intoinnobi:mainfrom
septatrix:main
Open

Build Python 3.14 wheels#419
septatrix wants to merge 2 commits intoinnobi:mainfrom
septatrix:main

Conversation

@septatrix
Copy link

Closes #418

@jorwoods
Copy link
Collaborator

jorwoods commented Jan 1, 2026

Python 3.10 is still in support until Oct 2026. Can you add it back into the cibuildwheel run?

Does 3.14 build for free-threaded as well?

@septatrix
Copy link
Author

Can you add it back into the cibuildwheel run?

Only to the cibuildwheel or also the requires-python?

Does 3.14 build for free-threaded as well?

Not sure, how do I test for that?

@WillAyd
Copy link
Collaborator

WillAyd commented Jan 2, 2026

Python 3.10 is still in support until Oct 2026. Can you add it back into the cibuildwheel run?

That might be true for the language, but most scientific Python packages follow the NEP-29 schedule for version support. Many similar tools have already dropped 3.10, so we don't need to add back in here

Does 3.14 build for free-threaded as well?

Not sure, how do I test for that?

I believe you just need to add a cp314t*-64 option. See https://cibuildwheel.pypa.io/en/stable/options/#build-skip

@septatrix
Copy link
Author

Dropped 3.10 again and added free-threading to the wheel build list

@WillAyd
Copy link
Collaborator

WillAyd commented Jan 4, 2026

Hmm looks like the CI job is still not building 3.14 wheels yet

https://github.com/innobi/pantab/actions/runs/20684555129/job/59421544218?pr=419#step:4:833

@septatrix
Copy link
Author

It seems like support for 3.14 was only added in cibuildwheel v3 so I updated the version of the GH actions plugin. I also removed the 3.13 free-threading wheel again as I found in the cibuildwheel docs that they are experimental and would require an extra flag (which is not required for 3.14)

@WillAyd
Copy link
Collaborator

WillAyd commented Jan 5, 2026

Looks like cffi doesn't create manylinux_2010 wheels. I'm OK to bump that to manylinux_2014 if it makes sense

@septatrix
Copy link
Author

Looks like cffi doesn't create manylinux_2010 wheels. I'm OK to bump that to manylinux_2014 if it makes sense

Where did you get those manylinux versions from? I though everything was built for manylinux_2_28? For me it rather looks like some dependency uses cffi which itself only provides 3.14 wheels starting with v2.0 and the dependency likely has limited the version to v1.x. The it tries to build cffi itself manually though the ffi headers are not available inside the ci.

We could either figure out which dependency that is and work with them to also allow newer cffi packages, or install libffi-dev in the CI such that it can get build.

@WillAyd
Copy link
Collaborator

WillAyd commented Jan 5, 2026

Where did you get those manylinux versions from? I though everything was built for manylinux_2_28? For me it rather looks like some dependency uses cffi which itself only provides 3.14 wheels starting with v2.0 and the dependency likely has limited the version to v1.x

Ah yea that's right. Its the tableauhyperapi dependency:

https://github.com/innobi/pantab/actions/runs/20700784706/job/59427222181?pr=419#step:4:1678

   Collecting cffi!=1.14.3,<2,>=1.12.2 (from tableauhyperapi)
    Downloading cffi-1.17.1.tar.gz (516 kB)
    Installing build dependencies: started
    Installing build dependencies: finished with status 'done'
    Getting requirements to build wheel: started
    Getting requirements to build wheel: finished with status 'done'
    Preparing metadata (pyproject.toml): started
    Preparing metadata (pyproject.toml): finished with status 'done'

Doesn't look like a 3.14 wheel was distributed by cffi until version 2.0

@WillAyd
Copy link
Collaborator

WillAyd commented Jan 5, 2026

We could either figure out which dependency that is and work with them to also allow newer cffi packages, or install libffi-dev in the CI such that it can get build.

The former is preferable. There's a good chance its a misguided pin in the first place, but if not then installing cffi from source probably still leads to whatever issue the tableauhyperapi is trying to avoid

@septatrix
Copy link
Author

As tableauhyperapi is not open source I cannot provide a PR over there. I opened an issue upstream (tableau/hyper-db#177) but have no experience how quickly they are in fixing them.

For the time being I think there is no harm in installing the required header files in CI. The wheel already builds fine so let's check if the tests pass... Otherwise everyone would need to downgrade to 3.13 if they want to use this package

@WillAyd
Copy link
Collaborator

WillAyd commented Jan 7, 2026

Yea the fact that tableauhyperapi is closed source is a challenge, for this and many other issues :-)

For the time being I think there is no harm in installing the required header files in CI.

The harm is that the Python dependency system doesn't fully enforce binary dependencies, so even if we can convince the former everything is alright, that leaves a huge gap with the latter. Especially when dealing with a closed source library like Tableau, that can lead to a huge amount of hard-to-debug issues

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Provide wheel for Py3.14

3 participants