https://github.com/python/cpython/commit/ada9da94bf431445db1f2ef1a7207d3b4f428c25
commit: ada9da94bf431445db1f2ef1a7207d3b4f428c25
branch: main
author: Peter Bierma <[email protected]>
committer: ZeroIntensity <[email protected]>
date: 2026-07-25T10:08:55-04:00
summary:
gh-154199: Soft-deprecate `ctypes.util.find_msvcrt` (GH-154553)
files:
A Misc/NEWS.d/next/Library/2026-07-23-13-09-25.gh-issue-154199.hmBfrS.rst
M Doc/library/ctypes.rst
M Lib/ctypes/util.py
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index a4de7cb09cca9d..acd6c2f97348e1 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -1866,6 +1866,10 @@ like ``find_library("c")`` will fail and return ``None``.
.. availability:: Windows
+ .. soft-deprecated:: 3.16
+ This function now always returns ``None``, as there are no more
+ VC runtime DLLs that are a single file and supported by Microsoft.
+
.. _ctypes-listing-loaded-shared-libraries:
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
index 52c1dbf9cd8cee..c0a578c86549ec 100644
--- a/Lib/ctypes/util.py
+++ b/Lib/ctypes/util.py
@@ -13,56 +13,19 @@
# find_library(name) returns the pathname of a library, or None.
if os.name == "nt":
-
- def _get_build_version():
- """Return the version of MSVC that was used to build Python.
-
- For Python 2.3 and up, the version number is included in
- sys.version. For earlier versions, assume the compiler is MSVC 6.
- """
- # This function was copied from Lib/distutils/msvccompiler.py
- prefix = "MSC v."
- i = sys.version.find(prefix)
- if i == -1:
- return 6
- i = i + len(prefix)
- s, rest = sys.version[i:].split(" ", 1)
- majorVersion = int(s[:-2]) - 6
- if majorVersion >= 13:
- majorVersion += 1
- minorVersion = int(s[2:3]) / 10.0
- # I don't think paths are affected by minor version in version 6
- if majorVersion == 6:
- minorVersion = 0
- if majorVersion >= 6:
- return majorVersion + minorVersion
- # else we don't know what version of the compiler this is
- return None
-
def find_msvcrt():
- """Return the name of the VC runtime dll"""
- version = _get_build_version()
- if version is None:
- # better be safe than sorry
- return None
- if version <= 6:
- clibname = 'msvcrt'
- elif version <= 13:
- clibname = 'msvcr%d' % (version * 10)
- else:
- # CRT is no longer directly loadable. See issue23606 for the
- # discussion about alternative approaches.
- return None
-
- # If python was built with in debug mode
- import importlib.machinery
- if '_d.pyd' in importlib.machinery.EXTENSION_SUFFIXES:
- clibname += 'd'
- return clibname+'.dll'
+ """Return the name of the VC runtime dll.
+ This is soft deprecated as of Python 3.16."""
+ # See gh-154199. In short, this function wasn't able to return
+ # newer msvcrt versions (because there was no single msvcrt DLL),
+ # and the versions that are a single DLL are no longer supported
+ # by Microsoft.
+ return None
def find_library(name):
if name in ('c', 'm'):
- return find_msvcrt()
+ # See gh-67794; there is no single VC runtime DLL anymore.
+ return None
# See MSDN for the REAL search order.
for directory in os.environ['PATH'].split(os.pathsep):
fname = os.path.join(directory, name)
diff --git
a/Misc/NEWS.d/next/Library/2026-07-23-13-09-25.gh-issue-154199.hmBfrS.rst
b/Misc/NEWS.d/next/Library/2026-07-23-13-09-25.gh-issue-154199.hmBfrS.rst
new file mode 100644
index 00000000000000..37463944a5de51
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-07-23-13-09-25.gh-issue-154199.hmBfrS.rst
@@ -0,0 +1,2 @@
+Make :func:`ctypes.util.find_msvcrt` always return ``None`` for
+compatibility reasons.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]