Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support free threaded Python versions like '3.13t' #973

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

colesbury
Copy link

Python wheels, pyenv, and a number of other tools use 't' in the Python version number to identify free threaded builds. For example, '3.13t', '3.14.0a1', '3.14t-dev'.

This PR supports that syntax in actions/setup-python, strips the "t", and adds "-freethreading" to the architecture to select the correct Python version.

See #771 and actions/python-versions#319

Python wheels, pyenv, and a number of other tools use 't' in the Python
version number to identify free threaded builds. For example, '3.13t',
'3.14.0a1', '3.14t-dev'.

This PR supports that syntax in `actions/setup-python`, strips the "t",
and adds "-freethreading" to the architecture to select the correct
Python version.

See actions#771
@renxida
Copy link

renxida commented Nov 24, 2024

Meanwhile, if you can't wait, here at https://github.com/nod-ai/shark-ai/actions/workflows/ci_linux_x64_nogil-libshortfin.yml

we are using

    - name: Setup Python
      uses: deadsnakes/action@e640ac8743173a67cca4d7d77cd837e514bf98e8 # v3.2.0
      with:
        python-version: "3.13-dev"
        nogil : true

@rgommers
Copy link

rgommers commented Nov 24, 2024

If anyone needs the functionality in this PR, I'd recommend to use https://github.com/Quansight-Labs/setup-python. That is a fork of this action with the sole purpose of providing the functionality in this PR (free-threading support) until this PR gets merged (see this issue for context).

Data point for reviewers: we've exercised this PR quite heavily by now in projects like NumPy and SciPy, on Linux, macOS and Windows (x86-64 and aarch64/arm64), and it's been working smoothly to date.

@priyagupta108
Copy link
Contributor

Hi @colesbury 👋,
Thank you for your valuable contribution!
During our testing, we observed that the changes in this PR do not support specifying the patch version (e.g., 3.13.1t) for the python-version input for the free-threaded binary. Please ensure that the python-version input values align with the existing input syntax.
Additionally, To keep the documentation up-to-date, please update this PR to incorporate the corresponding documentation updates.

Thank you!

@ddelange
Copy link

Also noting here that 3.13 and 3.13t currently don't live happily next to each other on Windows: Quansight-Labs#5 (comment)

@colesbury
Copy link
Author

Hi @priyagupta108, thank you for reviewing the PR. I've fixed the handling of versions like 3.13.1t and added a test for that. I've also updated the README and "advanced-usage" documentation.

@priyagupta108
Copy link
Contributor

priyagupta108 commented Jan 29, 2025

Hi @colesbury 👋,

Thank you for making the updates! During our testing of this PR, we've identified a few issues related to free-threaded Python version inputs:

  • Prerelease Versions: The current changes do not support semver notation for prerelease versions such as alpha, beta, and RC. For example, versions like 3.14.0-alpha.1, 3.14.0-beta.2, and 3.14.0-rc.1 should be supported.
    Additionally, versions such as 3.14.0a1t and 3.14.0ta1 are mentioned in the documentation changes, but they are failing to run as shown in the screenshot below. Please note that the versions 3.14.0a1t and 3.14.0ta1 do not appear to be valid semver notation according to the semver guidelines.

    Screenshot 2025-01-29 at 11 38 26 AM
    Screenshot 2025-01-29 at 11 38 55 AM

  • Version Ranges: Various range syntaxes (e.g., hyphen ranges, x-ranges) are unsupported.

  • python-version-file Input: Unable to read the Python version from pyproject.toml. It seems that the python-version-file input is not functioning correctly, as shown in the below screenshot.

    Screenshot 2025-01-28 at 6 21 11 PM

Here is a demo run showcasing prerelease versions, version ranges, and python-version-file input examples. Please ensure that the PR changes support these input syntaxes for free-threaded Python versions.

To ensure full compatibility with all supported Python version formats and inputs including python-version-file input, please address these issues and ensure the implementation fully supports semantic versioning (semver) guidelines to handle different version formats correctly. Additionally, update the documentation to provide clarity on the syntax for free-threaded Python versions.
For details on supported Python version inputs, please refer the action's documentation.

Thank you!

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.

5 participants