GeezerVison is showing github.com — Add support for Python 3.14 · Issue #2610 · pythonnet/pythonnet
Add support for Python 3.14 #2610DescriptionPython.net's requires-python places a hard upper pin on <3.14.
Python 3.14 is nearing release; RC1 is out, which indicates that ABI stability now exists.
It would be desirable for Python.net to support the upcoming Python release. Reacted by EliaOndacs, g/christensen, Stef Smeets, Jeff Chou, ghaarsma, Michael Wollensack, Mattias Josefsson, mashamellow, baseplate-admin, DareDevilDenis and 22 more ActivityEliaOndacs commented on Oct 7, 2025 hey, hello, as of right now i'm writing this python 3.14 released, and i unexpectedly ran into this problem of pythonnet not supporting python 3.14, so i'm running into this problem too, (runtime error while trying to run a python script that is using pythonnet), i wonder how long it takes to update it for python 3.14 considering its release-candidates and pre-releases have been out for a while Reacted by g/christensen, mashamellow, IB_U_Z_Z_A_R_Dl and Houbein filmor commented on Oct 7, 2025 Any help is appreciated. There is a branch you can test (#2611), but our CI is currently thoroughly broken and I haven't found the time to fix it, yet. freakboy3742 commented on Oct 7, 2025 @filmor I'm unfortunately not in a position to help directly - but if this is a situation that can be fixed by throwing money at someone who does have the skills to investigate the problem, I might be able to help. If that's the case, let me know. NasirNS45 commented on Oct 29, 2025 Any update on this? Ran into the same issue while installing awsebcli filmor commented on Oct 30, 2025 Work is happening in #2611. It works in general, but there are at least two crashes that I (or someone who wants to dive in) have to investigate. andre-romano commented on Nov 17, 2025 filmor commented on Nov 17, 2025 Houbein commented on Feb 23, 2026 filmor commented on Feb 25, 2026 3.1.0rc0 is out now with the Python 3.14 support merged. Please test and report back. I still have not found time to fix the CI completely, which is a prerequisite for me to cut this as a full release. Reacted by porly1985, Victor, Russell Keith-Magee and PythonPan Reacted by Stef Smeets MischaPanch commented on Apr 7, 2026 I guess I will have to be patient and somehow circumvent the missing release for now, thanks for the answer alexchandel commented on Apr 7, 2026 @MischaPanch You can take a crack at fixing the two failing tests, if you have time.
The failing unit test blocking 3.14 is test_getting_overloaded_method_binding_does_not_leak_memory, here .
def test_getting_overloaded_method_binding_does_not_leak_memory():
"""Test that managed object is freed after calling overloaded method. Issue #691"""
from PlainOldNamespace import PlainOldClass
import psutil, os, gc, clr
process = psutil.Process(os.getpid())
processBytesBeforeCall = process.memory_info().rss
print("\n\nMemory consumption (bytes) at start of test: " + str(processBytesBeforeCall))
iterations = 500
for i in range(iterations):
PlainOldClass().OverloadedMethod.Overloads[int]
gc.collect()
System.GC.Collect()
processBytesAfterCall = process.memory_info().rss
print("Memory consumption (bytes) at end of test: " + str(processBytesAfterCall))
processBytesDelta = processBytesAfterCall - processBytesBeforeCall
print("Memory delta: " + str(processBytesDelta))
bytesAllocatedPerIteration = pow(2, 20) # 1MB
bytesLeakedPerIteration = processBytesDelta / iterations
# Allow 50% threshold - this shows the original issue is fixed, which leaks the full allocated bytes per iteration
failThresholdBytesLeakedPerIteration = bytesAllocatedPerIteration / 2
> assert bytesLeakedPerIteration < failThresholdBytesLeakedPerIteration
E assert 903208.96 < 524288.0
tests\test_method.py:1015: AssertionError
---------------------------- Captured stdout call -----------------------------
Memory consumption (bytes) at start of test: 163160064
Memory consumption (bytes) at end of test: 614764544
Memory delta: 451604480
=========================== short test summary info ===========================
FAILED tests/test_method.py::test_getting_overloaded_method_binding_does_not_leak_memory - assert 903208.96 < 524288.0
============= 1 failed, 465 passed, 5 skipped, 1 xpassed in 5.02s =============
Additionally, the mono tests fail with an internal error here,
Determining projects to restore...
All projects are up-to-date for restore.
Python.Runtime -> /Users/runner/work/pythonnet/pythonnet/pythonnet/runtime/Python.Runtime.dll
Python.Test -> /Users/runner/work/pythonnet/pythonnet/src/testing/bin/Debug/netstandard2.0/Python.Test.dll
Python.Test -> /var/folders/t5/f77_gwnj6p95qxy9py3fckx00000gn/T/tmpe58flof0/
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/pythonnet/__init__.py", line 75, in _create_runtime_from_spec
INTERNALERROR> return clr_loader.get_mono(**params)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/clr_loader/__init__.py", line 78, in get_mono
INTERNALERROR> impl = Mono(
INTERNALERROR> # domain=domain,
INTERNALERROR> ...<7 lines>...
INTERNALERROR> set_signal_chaining=set_signal_chaining,
INTERNALERROR> )
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/clr_loader/mono.py", line 36, in __init__
INTERNALERROR> self._version: str = initialize(
INTERNALERROR> ~~~~~~~~~~^
INTERNALERROR> config_file=optional_path_as_string(config_file),
INTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> ...<8 lines>...
INTERNALERROR> trace_level=trace_level,
INTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> )
INTERNALERROR> ^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/clr_loader/mono.py", line 146, in initialize
INTERNALERROR> _MONO = load_mono(libmono)
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/clr_loader/ffi/__init__.py", line 49, in load_mono
INTERNALERROR> return ffi.dlopen(path_str, ffi.RTLD_GLOBAL)
INTERNALERROR> ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/cffi/api.py", line 150, in dlopen
INTERNALERROR> lib, function_cache = _make_ffi_library(self, name, flags)
INTERNALERROR> ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/cffi/api.py", line 834, in _make_ffi_library
INTERNALERROR> backendlib = _load_backend_lib(backend, libname, flags)
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/cffi/api.py", line 829, in _load_backend_lib
INTERNALERROR> raise OSError(msg)
INTERNALERROR> OSError: cannot load library '/Library/Frameworks/Mono.framework/Versions/Current/lib/libmonosgen-2.0.dylib': dlopen(/Library/Frameworks/Mono.framework/Versions/Current/lib/libmonosgen-2.0.dylib, 0x000A): tried: '/Library/Frameworks/Mono.framework/Versions/Current/lib/libmonosgen-2.0.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Library/Frameworks/Mono.framework/Versions/Current/lib/libmonosgen-2.0.dylib' (no such file), '/Library/Frameworks/Mono.framework/Versions/Current/lib/libmonosgen-2.0.dylib' (no such file). Additionally, ctypes.util.find_library() did not manage to locate a library called '/Library/Frameworks/Mono.framework/Versions/Current/lib/libmonosgen-2.0.dylib'
INTERNALERROR>
INTERNALERROR> The above exception was the direct cause of the following exception:
INTERNALERROR>
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/_pytest/main.py", line 314, in wrap_session
INTERNALERROR> config._do_configure()
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~^^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/_pytest/config/__init__.py", line 1159, in _do_configure
INTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/pluggy/_hooks.py", line 534, in call_historic
INTERNALERROR> res = self._hookexec(self.name, self._hookimpls.copy(), kwargs, False)
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/pluggy/_manager.py", line 120, in _hookexec
INTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/pluggy/_callers.py", line 167, in _multicall
INTERNALERROR> raise exception
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/.venv/lib/python3.14/site-packages/pluggy/_callers.py", line 121, in _multicall
INTERNALERROR> res = hook_impl.function(*args)
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/tests/conftest.py", line 87, in pytest_configure
INTERNALERROR> import clr
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/clr.py", line 6, in <module>
INTERNALERROR> load()
INTERNALERROR> ~~~~^^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/pythonnet/__init__.py", line 133, in load
INTERNALERROR> set_runtime_from_env()
INTERNALERROR> ~~~~~~~~~~~~~~~~~~~~^^
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/pythonnet/__init__.py", line 114, in set_runtime_from_env
INTERNALERROR> runtime = _create_runtime_from_spec(spec)
INTERNALERROR> File "/Users/runner/work/pythonnet/pythonnet/pythonnet/__init__.py", line 90, in _create_runtime_from_spec
INTERNALERROR> raise RuntimeError(
INTERNALERROR> ...<2 lines>...
INTERNALERROR> ) from exc
INTERNALERROR> RuntimeError: Failed to create a .NET runtime (mono) using the
INTERNALERROR> parameters {}.rayhaze commented on Apr 7, 2026 filmor commented on Apr 8, 2026 The blocker is #2696 and me travelling. I will get back to this in a week or so. If someone contributes patches for the blocker and the remaining CI issues, that would of course help a lot :) alexchandel commented on Apr 27, 2026 @filmor Do you think that CI failure (test_getting_overloaded_method_binding_does_not_leak_memory) is a genuine memory leak? dorfman2 commented on May 6, 2026 filmor commented on May 16, 2026 Reacted by Sebastian Fischer, ghaarsma and pepsibandit Reacted by Stef Smeets and pepsibandit ghaarsma commented on May 20, 2026 Looking forward to the official release. We tested our application with V3.1.0-rc1 and found no issues.
Thanks @filmor , for all your work in getting a Python 3.14 release out the door. wrichardsonafmil commented on May 21, 2026 freakboy3742 commented on May 22, 2026 @filmor I've done another pass of testing with 3.1.0rc1 with Toga's test suite, and didn't spot any problems. Reacted by Benedikt Reinartz, heartacker and Scott Madeux
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|