Skip to content

Commit 8a53447

Browse files
authored
PDEP-17: Backwards compatibility and deprecation policy (#59125)
1 parent 602ae10 commit 8a53447

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# PDEP-17: Backwards compatibility and deprecation policy
2+
3+
- Created: 27 June 2024
4+
- Status: Accepted
5+
- Discussion: [#59125](https://github.com/pandas-dev/pandas/issues/59125)
6+
- Author: [Abdulaziz Aloqeely](https://github.com/Aloqeely)
7+
- Revision: 1
8+
9+
## Abstract
10+
11+
This PDEP defines pandas' backwards compatibility and deprecation policy.
12+
13+
The main additions to [pandas' current version policy](https://pandas.pydata.org/pandas-docs/version/2.2/development/policies.html) are:
14+
- Deprecated functionality should remain unchanged in at least 2 minor releases before being changed or removed.
15+
- Deprecations should initially use DeprecationWarning, and then be switched to FutureWarning in the last minor release before the major release they are planned to be removed in
16+
17+
## Motivation
18+
19+
Having a clear backwards compatibility and deprecation policy is crucial to having a healthy ecosystem. We want to ensure users can rely on pandas being stable while still allowing the library to evolve.
20+
21+
This policy will ensure that users have enough time to deal with deprecations while also minimizing disruptions on downstream packages' users.
22+
23+
## Scope
24+
25+
This PDEP covers pandas' approach to backwards compatibility and the deprecation and removal process.
26+
27+
## Background
28+
29+
pandas uses a loose variant of semantic versioning.
30+
A pandas release number is written in the format of ``MAJOR.MINOR.PATCH``.
31+
32+
## General policy
33+
34+
This policy applies to the [public API][1]. Anything not part of the [public API][1] or is marked as "Experimental" may be changed or removed at anytime.
35+
36+
- Breaking backwards compatibility should benefit more than it harms users.
37+
- Breaking changes should go through a deprecation cycle before being implemented if possible.
38+
- Breaking changes should only occur in major releases.
39+
- No deprecations should be introduced in patch releases.
40+
- Deprecated functionality should remain unchanged in at least 2 minor releases before being changed or removed.
41+
42+
Some bug fixes may require breaking backwards compatibility. In these cases, a deprecation cycle is not necessary. However, bug fixes which have a large impact on users might be treated as a breaking change. Whether or not a change is a bug fix or an API breaking change is a judgement call.
43+
44+
## Deprecation process
45+
46+
Deprecation provides a way to warn developers and give them time to adapt their code to the new functionality before the old behavior is eventually removed.
47+
48+
A deprecation's warning message should:
49+
- Provide information on what is changing.
50+
- Mention how to achieve similar behavior if an alternative is available.
51+
- For large-scale deprecations, it is recommended to include a reason for the deprecation, alongside a discussion link to get user feedback.
52+
53+
Additionally, when one introduces a deprecation, they should:
54+
- Use the appropriate warning class. More info on this can be found below.
55+
- Add the GitHub issue/PR number as a comment above the warning line.
56+
- Add an entry in the release notes.
57+
- Mention that the functionality is deprecated in the documentation using the ``.. deprecated::`` directive.
58+
59+
### Which warning class to use
60+
61+
Deprecations should initially use ``DeprecationWarning``, and then be switched to ``FutureWarning`` for broader visibility in the last minor release before the major release they are planned to be removed in.
62+
This implementation detail can be ignored by using the appropriate ``PandasDeprecationWarning`` variable, which will be aliased to the proper warning class based on the pandas version.
63+
64+
### Enforcement of deprecations
65+
66+
When one enforces a deprecation, they should:
67+
- Add an entry in the release notes.
68+
- For API changes, replace the ``.. deprecated::`` directive in the documentation with a ``.. versionchanged::`` directive.
69+
70+
### PDEP-17 History
71+
72+
- 27 June 2024: Initial version.
73+
74+
[1]: https://pandas.pydata.org/docs/reference/index.html

0 commit comments

Comments
 (0)