A remarkably powerful dynamic programming language

Python (32-bit)

Python 3.12.5 (32-bit)

  -  24 MB  -  Open Source

Sometimes latest versions of the software can cause issues when installed on older devices or devices running an older version of the operating system.

Software makers usually fix these issues but it can take them some time. What you can do in the meantime is to download and install an older version of Python 3.12.5 (32-bit).


For those interested in downloading the most recent release of Python (32-bit) or reading our review, simply click here.


All old versions distributed on our website are completely virus-free and available for download at no cost.


We would love to hear from you

If you have any questions or ideas that you want to share with us - head over to our Contact page and let us know. We value your feedback!

  • Python 3.12.5 (32-bit) Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

    Python 3.12.5 (32-bit) Screenshot 1
  • Python 3.12.5 (32-bit) Screenshot 2
  • Python 3.12.5 (32-bit) Screenshot 3
  • Python 3.12.5 (32-bit) Screenshot 4
  • Python 3.12.5 (32-bit) Screenshot 5

What's new in this version:

Windows:
- The Windows build of CPython now requires 3.10 or newer

Tests:
-Add tests for pkgutil.extend_path()
-os.getloadavg() may throw OSError when running regression tests under certain conditions (e.g. chroot). This error is now caught and ignored, since reporting load average is optional
- Fix test_typing random leaks. Clear typing ABC caches when running tests for refleaks (-R option): call _abc_caches_clear() on typing abstract classes and their subclasses
- Add a test for readline.set_history_length(). Note that this test may fail on readline libraries
- Fix test_expanduser_pwd2() of test_posixpath. Call getpwnam() to get pw_dir, since it can be different than getpwall() pw_dir
- When creating the JUnit XML file, regrtest now escapes characters which are invalid in XML, such as the chr(27) control character used in ANSI escape sequences

Security:
- Fixed missing audit events around interactive use of Python, now also properly firing for python -i, as well as for python -m asyncio. The event in question is cpython.run_stdin
- Authenticate the socket connection for the socket.socketpair() fallback on platforms where AF_UNIX is not available like Windows

Library:
- Bump the version of pip bundled in ensurepip to version 24.2
- Fix crash when importing ssl after the main interpreter restarts
-In code.InteractiveInterpreter, handle exceptions caused by calling a non-default sys.excepthook(). Before, the exception bubbled up to the caller, ending the REPL
- Handle ValueErrors raised by os.stat() in filecmp.dircmp and filecmp.cmpfiles()
- Fix some error messages in pickle
- email headers with embedded newlines are now quoted on output. The generator will now refuse to serialize (write) headers that are unsafely folded or delimited; see verify_generated_headers. (Contributed by Bas Bloemsaat and Petr Viktorin in gh-121650.
- Fixed segfault with asyncio.Task.get_coro() when using an eager task factory
- Handle ValueErrors raised by os.stat() in linecache
- Make logging.config.dictConfig() accept any object implementing the Queue public API. See the queue configuration section for details
-Serializing objects with complex __qualname__ (such as unbound methods and nested classes) by name no longer involves serializing parent objects by value in pickle protocols < 4
- Fixed a bug introduced by gh-92081 that added an incorrect extra blank to encoded words occurring in wrapped headers
- Fix missing sanity check for parties arg in threading.Barrier constructor
- Improve the __repr__() of functools.partialmethod
- Fixed issues where argparse.ArgumentParser.parse_args() did not honor exit_on_error=False. Based o
- Fix truncation of strings with embedded null characters in some internal operations in tkinter
- When reading installed files from an egg, use relative_to(walk_up=True) to honor files installed outside of the installation root
- Accessing the tkinter object’s string representation no longer converts the underlying Tcl object to a string on Windows
- Fix possible memory leak in contextvars.Context.run()
- Make empty line in pdb repeats the last command even when the command is from cmdqueue
- Fix name passing to unittest.mock.Mock object when using unittest.mock.create_autospec()
- Fix incorrect exception handling in Tab Nanny
- Fix column offset reporting for tokens that come after multiline f-strings in the tokenize module
- Fix unittest.mock.patch() to not read attributes of the target when new_callable is set
- Fixed the use-after-free issue in cProfile by disallowing disable() and clear() in external timers
- Fix edge-case bug where typing.get_type_hints() would produce incorrect results if type parameters in a class scope were overridden by assignments in a class scope and from __future__ import annotations semantics were enabled
- Fix erroneous NameError when calling inspect.get_annotations() with eval_str=True` on a class that made use of PEP 695 type parameters in a module that had from __future__ import annotations at the top of the file
- Prohibit passing None to pure-Python datetime.date.fromtimestamp() to achieve consistency with C-extension implementation
- Fix memory leak in re.sub() when the replacement string contains backreferences
- Fix tkinter.ttk with Tcl/Tk 9.0
-Fix crash in C version of datetime.datetime.strptime() when called again on the restarted interpreter
- Defer the threading import in importlib.util until lazy loading is used
- Fix symtable.Class.get_methods() and document its behaviour
- Add concurrent.futures.InvalidStateError to module’s __all__
- Support building tkinter with Tcl 9.0
-unittest.mock.Mock.attach_mock() no longer triggers a call to a PropertyMock being attached
-help() and showtopic() methods now respect a configured output argument to pydoc.Helper and not use the pager in such cases
- The DeprecationWarning emitted when testing the truth value of an xml.etree.ElementTree.Element now describes unconditionally returning True in a future version rather than raising an exception in Python 3.14
- Fix io.TextIOWrapper.write() method breaks internal buffer when the method is called again during flushing internal buffer
- When using the ** operator or pow() with Fraction as the base and an exponent that is not rational, a float, or a complex, the fraction is no longer converted to a float
- Fix performance degradation in logging.handlers.RotatingFileHandler
- bpo-39324: Add mime type mapping for .md <-> text/markdown

IDLE:
- Change About IDLE to direct users to discuss.python.org instead of the now unused idle-dev email and mailing list
-Stop Shell freezes by blocking user access to non-method sys.stdout.shell attributes, which are all private
- Fix padding in config and search dialog windows in IDLE

Documentation:
- Fix documentation for PyModule_AddObjectRef()
- Clarify the behaviours of multiprocessing.Queue.empty() and multiprocessing.SimpleQueue.empty() on closed queues

Core and Builtins:
- Dictionary watchers now only deliver the PyDict_EVENT_ADDED event when the insertion is in a known good state to succeed
- Preserve AST nodes for f-string with single-element format specifiers
- Emit c_call events in sys.setprofile() when a PyMethodObject pointing to a PyCFunction is called
- Fix a bug that caused the tokenizer to not correctly identify mismatched parentheses inside f-strings in some situations
- Improve the SyntaxError message if the user tries to use yield from outside a function
- Unexpected slot wrappers are no longer created for builtin static types in subinterpreters
- Allow tuples of length 20 in the freelist to be reused
- Fix f-strings with debug expressions in format specifiers
- Correctly set the bytecode position on return instructions within lambdas
- Fix an array out of bounds crash in list_ass_subscript, which could be invoked via some specificly tailored input: including concurrent modification of a list object, where one thread assigns a slice and another clears it
- Fix Python implementation of pickle.Pickler for bytes and bytearray objects when using protocol version 5
-Fix source locations of instructions generated for the iterator of a for statement
- Fix a crash when multiple threads read and write to the same __class__ of an object concurrently
- Fix use-after free in list_richcompare_impl which can be invoked via some specificly tailored evil input
- Fix a compiler crash in the case where two comprehensions in class scope both reference __class__
- bpo-24766: Fix handling of doc argument to subclasses of property.

Build:
- Fix failing configure tests due to a missing space when appending to CFLAGS
- Skip building test modules that must be built as shared under WASI