# What changed in python-dateutil

> 16 changes in python-dateutil 3 from its official release notes, upgrade guides and advisories: 6 breaking, 1 deprecations, 2 new APIs and options. Each one cited. Sources checked 2026-10-22. HTML: https://unstale.sh/pypi/python-dateutil/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## python-dateutil 3

### Breaking changes

- The mutable search-path list has been removed; use `dateutil.tz.TZPATH` and `dateutil.tz.reset_tzpath` instead. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- The function no longer does anything and raises `RebuildDeprecationWarning` as an error by default. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- Passing a relative key that refers to a file outside every directory on `TZPATH` is deprecated and raises `DeprecatedTzKeyWarning` as an error by default. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- The minimum supported version is now 1.6, fixing `No module named 'six.moves'` errors with older versions. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- The package no longer bundles the IANA database; data comes from the system or the installed `tzdata` package. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- For times in a gap, `fold=0` uses the pre-transition offset and `fold=1` uses the post-transition offset, following PEP 495. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)

### Deprecations

- The module is deprecated and now wraps `tzdata`; users are encouraged to migrate to `dateutil.tz.gettz` or the standard library's `zoneinfo`. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)

### New APIs and options

- Allows runtime configuration of the IANA time zone data search path. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- Provides the time zone data search path, which can be configured at runtime. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)

### Behavior and default changes

- Cached instances can now be pickled and deep-copied; cache settings are preserved and cached results regenerated on demand. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- Cached instances can now be pickled and deep-copied; cache settings are preserved and cached results regenerated on demand. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)

### Fixes and other changes

- Comparing against an unsupported type such as `None` now returns `True` instead of raising `TypeError`. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- Experimental `X-` parameters in an `RRULE` line are now ignored instead of raising `ValueError`, as RFC 5545 permits. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- The rewrite supports Version 2 and Version 3 tzfile binaries, resolving issues with timestamps beyond 2038 and slim format binaries. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- Fixed-offset zones now return their offset, DST offset, and abbreviation when `utcoffset`, `dst`, and `tzname` are called with `None`, making attached `datetime.time` objects aware. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
- `dst()` is inferred from standard time on both sides of each DST period and for each transition, fixing several double, half-hour, and changing-standard-offset cases. (3.0.0) — [release notes](https://github.com/dateutil/dateutil/releases/tag/3.0.0)
