Skip to content

Commit 467e5ec

Browse files
committed
Dropped Python 3.9 support:
- pyproject.toml: requires-python changed to >=3.10, removed 3.9 classifier, cleaned up all python_version < '3.10' / python_version >= '3.10' conditional dependencies (coverage, click, numpy, orjson, polars, pytest, pytest-cov, python-dotenv) - .github/workflows/main.yaml: Removed 3.9 from matrix, added 3.14, changed DEFAULT_PYTHON and all conditional checks from 3.12 to 3.14 - noxfile.py: Removed 3.9, added 3.14 to pytest session - README.md: Updated to "Python 3.10+" and added "Dropping support for Python 3.9" to What is New - CLAUDE.md: Updated to "3.10+" - .github/ISSUE_TEMPLATE/bug_report.md: Updated example version from 3.9.12 to 3.10.12 Changelog/docs updates: - CHANGELOG.md: Added "Dropping support for Python 3.9" to v8-7-0 - docs/changelog.rst: Added "Dropping support for Python 3.9" to v8-7-0 - docs/index.rst: Added new 8-7-0 section with all its entries (matching the pattern of existing version sections)
1 parent ad9cdf2 commit 467e5ec

9 files changed

Lines changed: 31 additions & 27 deletions

File tree

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ A clear and concise description of what you expected to happen.
2121
**OS, DeepDiff version and Python version (please complete the following information):**
2222
- OS: [e.g. Ubuntu]
2323
- Version [e.g. 20LTS]
24-
- Python Version [e.g. 3.9.12]
24+
- Python Version [e.g. 3.10.12]
2525
- DeepDiff Version [e.g. 5.8.0]
2626

2727
**Additional context**

.github/workflows/main.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ jobs:
88
build:
99
runs-on: ubuntu-latest
1010
env:
11-
DEFAULT_PYTHON: '3.12'
11+
DEFAULT_PYTHON: '3.14'
1212
strategy:
1313
matrix:
14-
python-version: ['3.9','3.10','3.11','3.12','3.13']
14+
python-version: ['3.10','3.11','3.12','3.13','3.14']
1515
architecture: ['x64']
1616

1717
steps:
@@ -29,18 +29,18 @@ jobs:
2929
run: pip install nox==2025.5.1
3030

3131
- name: Lint with flake8
32-
if: ${{ matrix.python-version == '3.12' }}
32+
if: ${{ matrix.python-version == '3.14' }}
3333
run: |
3434
nox -s flake8 -- deepdiff --count --select=E9,F63,F7,F82 --show-source --statistics
3535
nox -s flake8 -- deepdiff --count --exit-zero --max-complexity=26 --max-line-length=250 --statistics
3636
3737
- name: Test with pytest (no coverage)
38-
if: ${{ matrix.python-version != '3.12' }}
38+
if: ${{ matrix.python-version != '3.14' }}
3939
run: |
4040
nox -s pytest-${{ matrix.python-version }} -- --benchmark-disable tests/
4141
4242
- name: Test with pytest (+ coverage)
43-
if: ${{ matrix.python-version == '3.12' }}
43+
if: ${{ matrix.python-version == '3.14' }}
4444
run: |
4545
nox -s pytest-${{ matrix.python-version }} -- \
4646
--benchmark-disable \
@@ -49,7 +49,7 @@ jobs:
4949
tests/ --runslow
5050
5151
- name: Upload coverage
52-
if: ${{ matrix.python-version == '3.12' }}
52+
if: ${{ matrix.python-version == '3.14' }}
5353
uses: codecov/codecov-action@v4
5454
with:
5555
token: ${{ secrets.CODECOV_TOKEN }}

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# DeepDiff Change log
22

33
- v8-7-0
4+
- Dropping support for Python 3.9
45
- Support for python 3.14
56
- `to_dict()` and `to_json()` now accept a `verbose_level` parameter and always return a usable text-view dict. When the original view is `'tree'`, they default to `verbose_level=2` for full detail. The old `view_override` parameter is removed.
67

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ nox
101101

102102
## Development Notes
103103

104-
- **Python Support**: 3.9+ and PyPy3
104+
- **Python Support**: 3.10+ and PyPy3
105105
- **Main Branch**: `master` (PRs typically go to `dev` branch)
106106
- **Build System**: Modern `pyproject.toml` with `flit_core`
107107
- **Dependencies**: Core dependency is `orderly-set>=5.4.1,<6`

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
- [Extract](https://zepworks.com/deepdiff/current/extract.html): Extract an item from a nested Python object using its path.
1616
- [commandline](https://zepworks.com/deepdiff/current/commandline.html): Use DeepDiff from commandline.
1717

18-
Tested on Python 3.9+ and PyPy3.
18+
Tested on Python 3.10+ and PyPy3.
1919

2020
- **[Documentation](https://zepworks.com/deepdiff/8.7.0/)**
2121

@@ -24,7 +24,8 @@ Tested on Python 3.9+ and PyPy3.
2424
Please check the [ChangeLog](CHANGELOG.md) file for the detailed information.
2525

2626
DeepDiff 8-7-0
27-
- support for python 3.14
27+
- Dropping support for Python 3.9
28+
- Support for python 3.14
2829
- `to_dict()` and `to_json()` now accept a `verbose_level` parameter and always return a usable text-view dict. When the original view is `'tree'`, they default to `verbose_level=2` for full detail. The old `view_override` parameter is removed.
2930

3031
DeepDiff 8-6-1

docs/changelog.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Changelog
66
DeepDiff Changelog
77

88
- v8-7-0
9+
- Dropping support for Python 3.9
910
- Support for python 3.14
1011
- ``to_dict()`` and ``to_json()`` now accept a ``verbose_level`` parameter and always return a usable text-view dict. When the original view is ``'tree'``, they default to ``verbose_level=2`` for full detail. The old ``view_override`` parameter is removed.
1112

docs/index.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ The DeepDiff library includes the following modules:
3131
What Is New
3232
***********
3333

34+
DeepDiff 8-7-0
35+
--------------
36+
37+
- Dropping support for Python 3.9
38+
- Support for python 3.14
39+
- ``to_dict()`` and ``to_json()`` now accept a ``verbose_level`` parameter and always return a usable text-view dict. When the original view is ``'tree'``, they default to ``verbose_level=2`` for full detail. The old ``view_override`` parameter is removed.
40+
41+
3442
DeepDiff 8-6-1
3543
--------------
3644

noxfile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def mypy(session) -> None:
3333
)
3434

3535

36-
@nox.session(python=["3.9", "3.10", "3.11", "3.12", "3.13"])
36+
@nox.session(python=["3.10", "3.11", "3.12", "3.13", "3.14"])
3737
def pytest(session) -> None:
3838
"""Test with pytest."""
3939
posargs = session.posargs if session.posargs else ["-vv", "tests"]

pyproject.toml

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ version = "8.7.0"
88
dependencies = [
99
"orderly-set>=5.4.1,<6",
1010
]
11-
requires-python = ">=3.9"
11+
requires-python = ">=3.10"
1212
authors = [
1313
{ name = "Seperman", email = "sep@zepworks.com" }
1414
]
@@ -23,7 +23,6 @@ classifiers = [
2323
"Intended Audience :: Developers",
2424
"Operating System :: OS Independent",
2525
"Topic :: Software Development",
26-
"Programming Language :: Python :: 3.9",
2726
"Programming Language :: Python :: 3.10",
2827
"Programming Language :: Python :: 3.11",
2928
"Programming Language :: Python :: 3.12",
@@ -37,28 +36,25 @@ classifiers = [
3736
# `dependency-groups` would make this a lot cleaner, in theory.
3837
[project.optional-dependencies]
3938
coverage = [
40-
"coverage~=7.13.4; python_version >= '3.10'",
41-
"coverage~=7.10.7; python_version < '3.10'"
39+
"coverage~=7.13.4",
4240
]
4341
cli = [
44-
"click~=8.3.1; python_version >= '3.10'",
45-
"click~=8.1.7; python_version < '3.10'",
42+
"click~=8.3.1",
4643
"pyyaml~=6.0.3"
4744
]
4845
dev = [
4946
"bump2version~=1.0.1",
5047
"jsonpickle~=4.1.1",
5148
"ipdb~=0.13.13",
5249
"numpy~=2.4.3; python_version >= '3.14'",
53-
"numpy~=2.2.0; python_version < '3.14' and python_version >= '3.10'",
54-
"numpy~=2.0; python_version < '3.10'",
50+
"numpy~=2.2.0; python_version < '3.14'",
5551
"python-dateutil~=2.9.0.post0",
56-
"orjson~=3.11.7; python_version >= '3.10'",
52+
"orjson~=3.11.7",
5753
"tomli~=2.4.0",
5854
"tomli-w~=1.2.0",
5955
"pandas~=3.0.1; python_version >= '3.11'",
6056
"pandas~=2.2.0; python_version < '3.11'",
61-
"polars~=1.38.1; python_version >= '3.10'",
57+
"polars~=1.38.1",
6258
"nox==2026.2.9",
6359
"uuid6==2025.0.1",
6460
"pytz",
@@ -75,13 +71,10 @@ static = [
7571
"pydantic~=2.12.5",
7672
]
7773
test = [
78-
"pytest~=9.0.2; python_version >= '3.10'",
79-
"pytest~=8.3.4; python_version < '3.10'",
74+
"pytest~=9.0.2",
8075
"pytest-benchmark~=5.2.3",
81-
"pytest-cov~=7.0.0; python_version >= '3.10'",
82-
"pytest-cov~=6.0.0; python_version < '3.10'",
83-
"python-dotenv~=1.2.2; python_version >= '3.10'",
84-
"python-dotenv~=1.0.1; python_version < '3.10'",
76+
"pytest-cov~=7.0.0",
77+
"python-dotenv~=1.2.2",
8578
]
8679
optimize = [
8780
"orjson",

0 commit comments

Comments
 (0)