FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-148690: Build Windows freethreaded binaries into separate directory and include python3t.dll on GIL-enabled by zooba · Pull Request #149218 · python/cpython · GitHub

/ cpython Public

gh-148690: Build Windows freethreaded binaries into separate directory and include python3t.dll on GIL-enabled - #149218

Merged
zooba merged 27 commits into
python:mainfrom
zooba:gh-148690
May 4, 2026
Merged

gh-148690: Build Windows freethreaded binaries into separate directory and include python3t.dll on GIL-enabled#149218
zooba merged 27 commits into
python:mainfrom
zooba:gh-148690

Conversation

zooba commented May 1, 2026
edited by bedevere-app Bot
Loading

Copy link
Copy Markdown
Member

Based heavily on @encukou's work in #148912, split into a separate PR because I'm going to need my own branch for testing release process stuff.

read-the-docs-community Bot commented May 1, 2026
edited
Loading

Copy link
Copy Markdown

Documentation build overview

📚 cpython-previews | 🛠️ Build #32528719 | 📁 Comparing 57871e9 against main (f4f82f0)

  🔍 Preview build  

3 files changed
± library/email.policy.html
± whatsnew/3.15.html
± whatsnew/changelog.html

zooba requested a review from vsajip as a code owner May 1, 2026 11:39

encukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Thank you for taking this on!

Comment thread PCbuild/_testcapi.vcxproj Outdated
Comment thread PCbuild/readme.txt Outdated

zooba commented May 1, 2026

Copy link
Copy Markdown
Member Author

I have a test release build running at https://dev.azure.com/Python/cpython/_build/results?buildId=169826&view=results If anyone wants to grab the results (look on the artifacts page for msi, embed, nuget, and pymanager_bundle) and post success/failure, that'd be great (cc @ngoldbaum )

zooba commented May 1, 2026

Copy link
Copy Markdown
Member Author

So far, I know that the PyManager packages are missing the python3t.dll (because I got the version check in PC/layout correct, but we haven't rev'd to that version yet, so it's "wrong" for testing). So far, I think the rest is looking good.

zware left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I see nothing that gives me pause here, but I'm not confident enough in my understanding to give it a green checkmark :)

zooba added the 🔨 test-with-buildbots Test PR w/ buildbots; report in status section label May 1, 2026

Copy link
Copy Markdown

🤖 New build scheduled with the buildbot fleet by @zooba for commit de2da65 🤖

Results will be shown at:

https://buildbot.python.org/all/#/grid?branch=refs%2Fpull%2F149218%2Fmerge

If you want to schedule another build, you need to add the 🔨 test-with-buildbots label again.

bedevere-bot removed the 🔨 test-with-buildbots Test PR w/ buildbots; report in status section label May 1, 2026

zooba commented May 1, 2026

Copy link
Copy Markdown
Member Author

A buildbot run ought to flush out any of the remaining edge cases we have to worry about. Anything else will just have to be found in the beta, I guess.

If someone else wants to merge when it passes, feel free. I probably won't see any results until after the weekend, which is getting very close to release.

<ClCompile Include="..\Python\dynload_win.c" />
<ClCompile Include="..\Python\dynload_win.c">
<PreprocessorDefinitions Condition="$(DisableGil) != 'true'">PY3_DLLNAME=L"$(Py3DllName)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>ABI3T_DLLNAME=L"$(Abi3tDllName)";%(PreprocessorDefinitions)</PreprocessorDefinitions>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality
Suggested change
<PreprocessorDefinitions>ABI3T_DLLNAME=L"$(Abi3tDllName)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="$(DisableGil) != 'true'>ABI3T_DLLNAME=L"$(Abi3tDllName)";%(PreprocessorDefinitions)</PreprocessorDefinitions>

See also comment in dynload_win.c:

 * ABI3T_DLLNAME is undefined for free-threaded builds, and so this function is
 * a no-op (we assume that _Py_CheckPython3 has already been called).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Hmm... I think it might be the comment that's out of date. If we add this condition, then no preprocessor value is ever set when the condition is false.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Yupp, your current approach to dynload_win.c in 185a6d7 seems much better. I've just checked again copying python315t.dll from a local build into the intermingled msi layout and it also fixes the crash when importing Nathan's extension 👍

Copy link
Copy Markdown
Member

Thanks @zooba , @encukou and @ngoldbaum!

I've tried the most recent artifacts from https://dev.azure.com/Python/cpython/_build/results?buildId=169835&view=artifacts&pathAsName=false&type=publishedArtifacts

  • pymanager_amd64
  • pymanager_amd64_t
  • msi

and installed Nathan's limited_api-1.2.3-cp315-abi3.abi3t-win_amd64.whl. Everything fine except the ft case in the intermingled msi layout.

But using the resulting python315t.dll from a custom build with the fix I've suggested above, it works for me, too 🚀

encukou commented May 4, 2026

Copy link
Copy Markdown
Member

The Fedora failure is unrelated of course, but the nogil failures look concerning. In test_cext test_cppext test_peg_generator (PGO) or test_peg_generator only (2022) we get:

LINK : fatal error LNK1104: cannot open file 'python315t.lib'

zooba commented May 4, 2026

Copy link
Copy Markdown
Member Author

the nogil failures look concerning

I think these tests just need updating for the new build output directory. I figured there'd be a few cases, but decided to flush them out in CI rather than tying up my laptop for all the tests 🙃

zooba commented May 4, 2026

Copy link
Copy Markdown
Member Author

!buildbot .+Windows.+

Copy link
Copy Markdown

🤖 New build scheduled with the buildbot fleet by @zooba for commit 185a6d7 🤖

Results will be shown at:

https://buildbot.python.org/all/#/grid?branch=refs%2Fpull%2F149218%2Fmerge

The command will test the builders whose names match following regular expression: .+Windows.+

The builders matched are:

  • AMD64 Windows10 PR
  • AMD64 Windows11 Non-Debug PR
  • AMD64 Windows Server 2022 NoGIL PR
  • AMD64 Windows PGO PR
  • AMD64 Windows11 Refleaks PR
  • AMD64 Windows PGO Tailcall PR
  • AMD64 Windows11 Bigmem PR
  • AMD64 Windows PGO NoGIL PR
  • AMD64 Windows PGO NoGIL Tailcall PR
  • ARM64 Windows Non-Debug PR
  • ARM64 Windows PR

encukou commented May 4, 2026

Copy link
Copy Markdown
Member

I'll echo Zach's words: I see nothing that gives me pause here :)

Thanks for pushing this through!

Copy link
Copy Markdown
Contributor

Yes, thanks for making sure this is ready in time!

zooba commented May 4, 2026

Copy link
Copy Markdown
Member Author

Yeah, clean buildbots are as good as we're going to get without shipping it. Thanks for all the help from everyone!

zooba merged commit 10f950c into python:main May 4, 2026
66 checks passed

Copy link
Copy Markdown

⚠️⚠️⚠️ Buildbot failure ⚠️⚠️⚠️

Hi! The buildbot iOS ARM64 Simulator 3.x (tier-3) has failed when building commit 10f950c.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/#/builders/1380/builds/6540) and take a look at the build logs.
  4. Check if the failure is related to this commit (10f950c) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/#/builders/1380/builds/6540

Summary of the results of the build (if available):

Click to see traceback logs
remote: Enumerating objects: 104, done.        
remote: Counting objects:   0% (1/104)        
remote: Counting objects:   1% (2/104)        
remote: Counting objects:   2% (3/104)        
remote: Counting objects:   3% (4/104)        
remote: Counting objects:   4% (5/104)        
remote: Counting objects:   5% (6/104)        
remote: Counting objects:   6% (7/104)        
remote: Counting objects:   7% (8/104)        
remote: Counting objects:   8% (9/104)        
remote: Counting objects:   9% (10/104)        
remote: Counting objects:  10% (11/104)        
remote: Counting objects:  11% (12/104)        
remote: Counting objects:  12% (13/104)        
remote: Counting objects:  13% (14/104)        
remote: Counting objects:  14% (15/104)        
remote: Counting objects:  15% (16/104)        
remote: Counting objects:  16% (17/104)        
remote: Counting objects:  17% (18/104)        
remote: Counting objects:  18% (19/104)        
remote: Counting objects:  19% (20/104)        
remote: Counting objects:  20% (21/104)        
remote: Counting objects:  21% (22/104)        
remote: Counting objects:  22% (23/104)        
remote: Counting objects:  23% (24/104)        
remote: Counting objects:  24% (25/104)        
remote: Counting objects:  25% (26/104)        
remote: Counting objects:  26% (28/104)        
remote: Counting objects:  27% (29/104)        
remote: Counting objects:  28% (30/104)        
remote: Counting objects:  29% (31/104)        
remote: Counting objects:  30% (32/104)        
remote: Counting objects:  31% (33/104)        
remote: Counting objects:  32% (34/104)        
remote: Counting objects:  33% (35/104)        
remote: Counting objects:  34% (36/104)        
remote: Counting objects:  35% (37/104)        
remote: Counting objects:  36% (38/104)        
remote: Counting objects:  37% (39/104)        
remote: Counting objects:  38% (40/104)        
remote: Counting objects:  39% (41/104)        
remote: Counting objects:  40% (42/104)        
remote: Counting objects:  41% (43/104)        
remote: Counting objects:  42% (44/104)        
remote: Counting objects:  43% (45/104)        
remote: Counting objects:  44% (46/104)        
remote: Counting objects:  45% (47/104)        
remote: Counting objects:  46% (48/104)        
remote: Counting objects:  47% (49/104)        
remote: Counting objects:  48% (50/104)        
remote: Counting objects:  49% (51/104)        
remote: Counting objects:  50% (52/104)        
remote: Counting objects:  51% (54/104)        
remote: Counting objects:  52% (55/104)        
remote: Counting objects:  53% (56/104)        
remote: Counting objects:  54% (57/104)        
remote: Counting objects:  55% (58/104)        
remote: Counting objects:  56% (59/104)        
remote: Counting objects:  57% (60/104)        
remote: Counting objects:  58% (61/104)        
remote: Counting objects:  59% (62/104)        
remote: Counting objects:  60% (63/104)        
remote: Counting objects:  61% (64/104)        
remote: Counting objects:  62% (65/104)        
remote: Counting objects:  63% (66/104)        
remote: Counting objects:  64% (67/104)        
remote: Counting objects:  65% (68/104)        
remote: Counting objects:  66% (69/104)        
remote: Counting objects:  67% (70/104)        
remote: Counting objects:  68% (71/104)        
remote: Counting objects:  69% (72/104)        
remote: Counting objects:  70% (73/104)        
remote: Counting objects:  71% (74/104)        
remote: Counting objects:  72% (75/104)        
remote: Counting objects:  73% (76/104)        
remote: Counting objects:  74% (77/104)        
remote: Counting objects:  75% (78/104)        
remote: Counting objects:  76% (80/104)        
remote: Counting objects:  77% (81/104)        
remote: Counting objects:  78% (82/104)        
remote: Counting objects:  79% (83/104)        
remote: Counting objects:  80% (84/104)        
remote: Counting objects:  81% (85/104)        
remote: Counting objects:  82% (86/104)        
remote: Counting objects:  83% (87/104)        
remote: Counting objects:  84% (88/104)        
remote: Counting objects:  85% (89/104)        
remote: Counting objects:  86% (90/104)        
remote: Counting objects:  87% (91/104)        
remote: Counting objects:  88% (92/104)        
remote: Counting objects:  89% (93/104)        
remote: Counting objects:  90% (94/104)        
remote: Counting objects:  91% (95/104)        
remote: Counting objects:  92% (96/104)        
remote: Counting objects:  93% (97/104)        
remote: Counting objects:  94% (98/104)        
remote: Counting objects:  95% (99/104)        
remote: Counting objects:  96% (100/104)        
remote: Counting objects:  97% (101/104)        
remote: Counting objects:  98% (102/104)        
remote: Counting objects:  99% (103/104)        
remote: Counting objects: 100% (104/104)        
remote: Counting objects: 100% (104/104), done.        
remote: Compressing objects:   2% (1/45)        
remote: Compressing objects:   4% (2/45)        
remote: Compressing objects:   6% (3/45)        
remote: Compressing objects:   8% (4/45)        
remote: Compressing objects:  11% (5/45)        
remote: Compressing objects:  13% (6/45)        
remote: Compressing objects:  15% (7/45)        
remote: Compressing objects:  17% (8/45)        
remote: Compressing objects:  20% (9/45)        
remote: Compressing objects:  22% (10/45)        
remote: Compressing objects:  24% (11/45)        
remote: Compressing objects:  26% (12/45)        
remote: Compressing objects:  28% (13/45)        
remote: Compressing objects:  31% (14/45)        
remote: Compressing objects:  33% (15/45)        
remote: Compressing objects:  35% (16/45)        
remote: Compressing objects:  37% (17/45)        
remote: Compressing objects:  40% (18/45)        
remote: Compressing objects:  42% (19/45)        
remote: Compressing objects:  44% (20/45)        
remote: Compressing objects:  46% (21/45)        
remote: Compressing objects:  48% (22/45)        
remote: Compressing objects:  51% (23/45)        
remote: Compressing objects:  53% (24/45)        
remote: Compressing objects:  55% (25/45)        
remote: Compressing objects:  57% (26/45)        
remote: Compressing objects:  60% (27/45)        
remote: Compressing objects:  62% (28/45)        
remote: Compressing objects:  64% (29/45)        
remote: Compressing objects:  66% (30/45)        
remote: Compressing objects:  68% (31/45)        
remote: Compressing objects:  71% (32/45)        
remote: Compressing objects:  73% (33/45)        
remote: Compressing objects:  75% (34/45)        
remote: Compressing objects:  77% (35/45)        
remote: Compressing objects:  80% (36/45)        
remote: Compressing objects:  82% (37/45)        
remote: Compressing objects:  84% (38/45)        
remote: Compressing objects:  86% (39/45)        
remote: Compressing objects:  88% (40/45)        
remote: Compressing objects:  91% (41/45)        
remote: Compressing objects:  93% (42/45)        
remote: Compressing objects:  95% (43/45)        
remote: Compressing objects:  97% (44/45)        
remote: Compressing objects: 100% (45/45)        
remote: Compressing objects: 100% (45/45), done.        
remote: Total 55 (delta 47), reused 15 (delta 10), pack-reused 0 (from 0)        
From https://github.com/python/cpython
 * branch                    main       -> FETCH_HEAD
Note: switching to '10f950c9bb0ff4583f361a42aaed562b330e1dba'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 10f950c9bb0 gh-148690: Build Windows freethreaded binaries into separate directory and include python3t.dll on GIL-enabled (GH-149218)
Switched to and reset branch 'main'

configure: WARNING: no system libmpdec found; falling back to pure-Python version for the decimal module
configure: WARNING: pkg-config is missing. Some dependencies may not be detected correctly.

configure: WARNING: pkg-config is missing. Some dependencies may not be detected correctly.
ld: warning: ignoring duplicate libraries: '-lm'
In file included from ../../Modules/_remote_debugging/module.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/gc_stats.c:7:
In file included from ../../Modules/_remote_debugging/gc_stats.h:14:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/object_reading.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/code_objects.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/frames.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
1 warning generated.
In file included from ../../Modules/_remote_debugging/frame_cache.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/threads.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
1 warning generated.
In file included from ../../Modules/_remote_debugging/asyncio.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/binary_io_writer.c:13:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/binary_io_reader.c:13:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/subprocess.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../Modules/_remote_debugging/subprocess.c:100:1: warning: unused function 'find_children_bfs' [-Wunused-function]
  100 | find_children_bfs(pid_t target_pid, int recursive,
      | ^~~~~~~~~~~~~~~~~
2 warnings generated.
In file included from ../../Modules/_remote_debugging/interpreters.c:7:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
1 warning generated.
1 warning generated.
1 warning generated.
ld: warning: ignoring duplicate libraries: '-lm'
configure: WARNING: pkg-config is missing. Some dependencies may not be detected correctly.
ld: warning: ignoring duplicate libraries: '-lm'
In file included from ../../Modules/_remote_debugging/module.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/gc_stats.c:7:
In file included from ../../Modules/_remote_debugging/gc_stats.h:14:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/object_reading.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/code_objects.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/frames.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
1 warning generated.
1 warning generated.
In file included from ../../Modules/_remote_debugging/frame_cache.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/threads.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/asyncio.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
1 warning generated.
In file included from ../../Modules/_remote_debugging/binary_io_writer.c:13:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/subprocess.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../Modules/_remote_debugging/subprocess.c:100:1: warning: unused function 'find_children_bfs' [-Wunused-function]
  100 | find_children_bfs(pid_t target_pid, int recursive,
      | ^~~~~~~~~~~~~~~~~
2 warnings generated.
In file included from ../../Modules/_remote_debugging/binary_io_reader.c:13:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/interpreters.c:7:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
1 warning generated.
1 warning generated.
1 warning generated.
ld: warning: ignoring duplicate libraries: '-lm'
configure: WARNING: x86_64-apple-ios-simulator/clang is not supported
configure: WARNING: pkg-config is missing. Some dependencies may not be detected correctly.
configure: WARNING:

Platform "x86_64-apple-ios-simulator" with compiler "clang" is not supported by the
CPython core team, see https://peps.python.org/pep-0011/ for more information.

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(brc.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(dynamic_annotations.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(gc_free_threading.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(index_pool.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(jit.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(optimizer_analysis.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(optimizer_symbols.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(pystats.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(stackrefs.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(uniqueid.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(perf_jit_trampoline.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libpython3.15.a(jit_unwind.o) has no symbols
ld: warning: ignoring duplicate libraries: '-lm'
In file included from ../../Modules/_remote_debugging/gc_stats.c:7:
In file included from ../../Modules/_remote_debugging/gc_stats.h:14:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/module.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/object_reading.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/code_objects.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/frames.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/frame_cache.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
1 warning generated.
1 warning generated.
In file included from ../../Modules/_remote_debugging/threads.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/asyncio.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../Modules/_remote_debugging/binary_io_writer.c:13:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/subprocess.c:8:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../Modules/_remote_debugging/subprocess.c:100:1: warning: unused function 'find_children_bfs' [-Wunused-function]
  100 | find_children_bfs(pid_t target_pid, int recursive,
      | ^~~~~~~~~~~~~~~~~
1 warning generated.
2 warnings generated.
In file included from ../../Modules/_remote_debugging/interpreters.c:7:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
In file included from ../../Modules/_remote_debugging/binary_io_reader.c:13:
In file included from ../../Modules/_remote_debugging/_remote_debugging.h:34:
../../Modules/_remote_debugging/../../Python/remote_debug.h:165:1: warning: unused function '_Py_RemoteDebug_ValidatePyRuntimeCookie' [-Wunused-function]
  165 | _Py_RemoteDebug_ValidatePyRuntimeCookie(proc_handle_t *handle, uintptr_t address)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
1 warning generated.
1 warning generated.
ld: warning: ignoring duplicate libraries: '-lm'

--- xcodebuild: WARNING: Using the first of multiple matching destinations:
{ platform:iOS Simulator, id:4F9AFDE7-A49A-46AD-B161-FCA22E48EA55, OS:18.3.1, name:iPhone SE (3rd generation) }
{ platform:iOS Simulator, id:4F9AFDE7-A49A-46AD-B161-FCA22E48EA55, OS:18.3.1, name:iPhone SE (3rd generation) }

zooba deleted the gh-148690 branch May 5, 2026 13:35

Copy link
Copy Markdown
Member

I've just tested the official 3.15 beta 1 binaries and get this error when loading Nathan's wheel:

(venv3.15) C:\>python
Python 3.15.0b1 (tags/v3.15.0b1:f31a89b, May  7 2026, 13:53:53) [MSC v.1950 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import limited
Traceback (most recent call last):
  File "<python-input-0>", line 1, in <module>
    import limited
  File "C:\Users\suc\venv3.15\Lib\site-packages\limited\__init__.py", line 1, in <module>
    from .limited import *
SystemError: invalid module slot 5 (Py_mp_subscript)
>>>

I think this is related to PEP 820 #149055 and the wheel just needs to be recompiled?

Copy link
Copy Markdown
Contributor

Yes, that's right. @mgorny is working on the update for the stable-abi-testing repo.

Copy link
Copy Markdown
Contributor

@chris-eibl here are updated wheel files. The first was generated using a GIL-enabled interpreter, the second with a free-threaded interpreter.

limited_api-1.2.3-cp315-abi3.abi3t-win_amd64.whl.gil-enabled.zip
limited_api-1.2.3-cp315-abi3.abi3t-win_amd64.whl.free-threaded.zip

Copy link
Copy Markdown
Member

Works great with the official 3.15b1 binaries 🚀

I can install, load and call add() for both of them in

  • pyinstaller based 3.15 and 3.15t installs
  • and a legacy install with 3.15 and 3.15t intermingled. Regardless which of those two wheels is installed, both interpreters can always load and run them 👍

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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.

6 participants


Back | FazBrowse Home | New Git URL