@@ -146,12 +146,16 @@ def get_python_binary(python: str, host: Host) -> str:
146146 else :
147147 base = "C:/python"
148148 python = python .replace ("." , "" )
149+ if python == "313t" :
150+ return f"{ base } /Python313/python3.13t.exe"
149151 return f"{ base } /Python{ python } /python.exe"
150152
151153 if name in ["rhel8" , "ubuntu22" , "ubuntu20" , "rhel7" ]:
152154 return f"/opt/python/{ python } /bin/python3"
153155
154156 if name in ["macos" , "macos-arm64" ]:
157+ if python == "3.13t" :
158+ return "/Library/Frameworks/PythonT.Framework/Versions/3.13/bin/python3t"
155159 return f"/Library/Frameworks/Python.Framework/Versions/{ python } /bin/python3"
156160
157161 raise ValueError (f"no match found for python { python } on { name } " )
@@ -318,6 +322,21 @@ def create_server_variants() -> list[BuildVariant]:
318322 return variants
319323
320324
325+ def create_free_threaded_variants () -> list [BuildVariant ]:
326+ variants = []
327+ for host_name in ("rhel8" , "macos" , "macos-arm64" , "win64" ):
328+ if host_name == "win64" :
329+ # TODO: PYTHON-5027
330+ continue
331+ tasks = [".free-threading" ]
332+ host = HOSTS [host_name ]
333+ python = "3.13t"
334+ display_name = get_display_name ("Free-threaded" , host , python = python )
335+ variant = create_variant (tasks , display_name , python = python , host = host )
336+ variants .append (variant )
337+ return variants
338+
339+
321340def create_encryption_variants () -> list [BuildVariant ]:
322341 variants = []
323342 tags = ["encryption_tag" ]
0 commit comments