wrapt is a Python module for building decorators, function and object wrappers, and runtime monkey patching. It focuses on preserving decorator introspection and signatures, and uses a C extension for performance-critical parts with a pure Python fallback when needed.
Project status
- Actively maintained, with very recent activity (upstream last push 2026-10-14) and multiple package updates in October 2026, including a promotion from 2.5.1rc1 to 2.5.1.
- Apparent update cadence looks fairly regular over the last couple months, with version progression from 2.4.x (early September) through 2.5.0 (late September) and into 2.5.1 (mid-October), suggesting an ongoing release pipeline rather than a long pause.
AI summary generated
Recent updates
2.5.1
This release (wrapt 2.5.1) is primarily a version finalization from the 2.5.1rc1 release candidate to the stable 2.5.1 release. The provided release notes do not enumerate specific code changes beyond the general PyPI/wheel information.
2.5.1rc1
This release is a release candidate build of wrapt version 2.5.1rc1. The release notes are minimal and primarily instruct how to install the candidate from PyPi or from the provided source/wheels.
2.5.1.dev1
wrapt 2.5.1.dev1 is a development snapshot build intended to exercise the release pipeline, with wheels and source provided. The code diff shows several behavior fixes targeting adapter factories, LazyObjectProxy path-like support, and WeakFunctionProxy callback handling.
2.5.0
wrapt 2.5.0 is published with pre-built wheels for multiple Python versions and platforms, plus an sdist and SHA256SUMS for verification. The provided release notes do not enumerate any functional changes in-line. The actual code diff between 2.5.0rc1 and 2.5.0 shows only a version metadata update.
2.5.0rc1
wrapt 2.5.0rc1 is a release candidate, but the release notes do not document any specific functional changes beyond directing readers to the upcoming 2.5.0 changes page. The code diff for 2.4.2rc1 to 2.5.0rc1 shows multiple user-facing behavior and API updates, most notably new docstring override support and changes to how __doc__ is resolved for proxy instances.
2.4.2rc1
This release candidate bumps wrapt from 2.4.1 to 2.4.2rc1. The code changes focus on fixing serious C-extension crashes and error behavior around proxy descriptor binding, deletion of __module__/__doc__, and calling wrappers that were created without running their __init__.
2.4.1
wrapt 2.4.1 is published, but the provided release notes do not list any specific code or API changes. The actual diff between 2.4.1rc1 and 2.4.1 only updates the package version metadata in src/wrapt/__init__.py.
2.4.1rc1
This release candidate targets wrapt 2.4.1. The actual code changes mainly update the behavior of PartialCallableObjectProxy across the pure Python and C extension implementations, especially around bound-argument introspection (_self_args, _self_kwargs) and inspect.signature via __signature__. It also improves the C extension's handling of __module__ and __doc__ attribute access for non-interned attribute-name strings.
BreakingFeatures2.4.0
wrapt 2.4.0 is cut from the 2.4.0rc5 release candidate. The provided release notes do not list any functional or API changes.
2.4.0rc5
This release is a release candidate for wrapt 2.4.0 (version updated to 2.4.0rc5). The provided release notes are generic and do not enumerate functional changes.
2.4.0rc4
This release candidate (2.4.0rc4) updates version metadata and introduces significant runtime validation for the async_to_sync and sync_to_async adapters. The release notes provided are minimal and do not describe these behavioral changes, but the code and tests clearly add new error and warning cases plus altered introspection behavior.
BreakingFeatures2.4.0rc3
This release is a release candidate bump for wrapt 2.4.0, updating the package version string to 2.4.0rc3. While the published release notes for the RC are essentially empty, the code diff includes a behavioral change to the mark_as_async marker and expanded test coverage around call semantics.
2.4.0rc2
This release candidate (2.4.0rc2) introduces substantial new monkey-patching and wrapper-introspection APIs, including facilities to remove installed wrappers and to traverse wrapper chains. The provided release notes are essentially a pointer to the 2.4.0 final change log, so the actual behavioral and API changes are not meaningfully documented here.
Features2.4.0rc1
This release is a wrapt 2.4.0 release candidate (2.4.0rc1). The release notes are minimal and mainly describe how to install the candidate from PyPI or from the provided source/wheels, with verification via SHA256SUMS.
2.4.0.dev3
This is a development snapshot release (wrapt 2.4.0.dev3) with no specific functional changes described in the provided release notes. The actual code diff, however, includes a substantial C extension update focused on free-threading memory safety and reference lifetime management across proxy and wrapper operations.
2.4.0.dev2
This release is a development snapshot (wrapt 2.4.0.dev2) intended to exercise the build and release pipeline. The provided release notes focus on installation from the attached wheel and source archives, plus SHA256 verification, but do not describe any build-matrix or wheel-building behavior changes.
2.4.0.dev1
wrapt 2.4.0.dev1 is a development snapshot and is not normally published to PyPI. The provided release notes do not describe any specific functional changes beyond distribution/testing instructions.
2.3.0
wrapt 2.3.0 is published with updated distribution artifacts (wheels and sdist). The provided release notes do not describe any functional code changes.
2.3.0rc2
This is a release candidate for wrapt 2.3.0 final (rc2). The provided release notes only cover installation and do not enumerate functional changes. The code diff shows a behavioral fix in the C extension for how wrapt.ObjectProxy implements the bytes() conversion.
2.3.0rc1
This release is a release candidate tag for wrapt 2.3.0rc1, intended to become the upcoming 2.3.0 final. The provided release notes mainly describe packaging and how to install the candidate, not functional changes.