Skip to content

Build Python 3.14 wheels#419

Merged
WillAyd merged 1 commit into
innobi:mainfrom
septatrix:main
Mar 17, 2026
Merged

Build Python 3.14 wheels#419
WillAyd merged 1 commit into
innobi:mainfrom
septatrix:main

Conversation

@septatrix

Copy link
Copy Markdown
Contributor

Closes #418

@jorwoods

jorwoods commented Jan 1, 2026

Copy link
Copy Markdown
Collaborator

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
Copy Markdown
Contributor 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

WillAyd commented Jan 2, 2026

Copy link
Copy Markdown
Collaborator

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
Copy Markdown
Contributor Author

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

@WillAyd

WillAyd commented Jan 4, 2026

Copy link
Copy Markdown
Collaborator

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
Copy Markdown
Contributor 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

WillAyd commented Jan 5, 2026

Copy link
Copy Markdown
Collaborator

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
Copy Markdown
Contributor 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

WillAyd commented Jan 5, 2026

Copy link
Copy Markdown
Collaborator

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

WillAyd commented Jan 5, 2026

Copy link
Copy Markdown
Collaborator

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
Copy Markdown
Contributor 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

WillAyd commented Jan 7, 2026

Copy link
Copy Markdown
Collaborator

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

@sibbiii

sibbiii commented Feb 19, 2026

Copy link
Copy Markdown

Ps.: The blocking Tableau Hyperapi fix is in the release from Feb 12 (see https://tableau.github.io/hyper-db/docs/releases)

@asaadmusba

Copy link
Copy Markdown

Hello
Do we have a timeline of when the 3.14 wheels will be ready?

@septatrix septatrix force-pushed the main branch 2 times, most recently from e713ed0 to a8df072 Compare March 15, 2026 22:49
@septatrix

Copy link
Copy Markdown
Contributor Author

I have now dropped the second commit (installing ffi manually in the CI) which should hopefully no longer be necessary with upstream wheels available

@WillAyd

WillAyd commented Mar 16, 2026

Copy link
Copy Markdown
Collaborator

Looks like the CI failures have to do with a type mismatch on round-tripping

@septatrix

Copy link
Copy Markdown
Contributor Author

Looks like the CI failures have to do with a type mismatch on round-tripping

Sadly this leaves my area of expertise sufficient knowledge

@WillAyd

WillAyd commented Mar 16, 2026

Copy link
Copy Markdown
Collaborator

Copilot thinks that the error is related to an upstream pandas bug in pandas-dev/pandas#64578

@WillAyd

WillAyd commented Mar 16, 2026

Copy link
Copy Markdown
Collaborator

@septatrix I believe #424 will fix all of the related CI issues - can you either rebase on that or merge it into here?

@septatrix

Copy link
Copy Markdown
Contributor Author

Rebased

@WillAyd

WillAyd commented Mar 16, 2026

Copy link
Copy Markdown
Collaborator

Hmm looks like the free threaded wheels are taking 20x as long as the standard wheels to test - any idea what might cause that?

@WillAyd

WillAyd commented Mar 17, 2026

Copy link
Copy Markdown
Collaborator

Ah OK - looks like the longer runtime is from building polars, not from the tests themselves. that can be cleaned up in another PR

@WillAyd WillAyd merged commit c869909 into innobi:main Mar 17, 2026
12 checks passed
@WillAyd

WillAyd commented Mar 17, 2026

Copy link
Copy Markdown
Collaborator

Thanks @septatrix !

@WillAyd WillAyd mentioned this pull request Apr 8, 2026
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

5 participants