Skip to content

Commit 470f57b

Browse files
authored
Drop Python 3.9 support (#545)
## Summary Removes support for Python 3.9, which has reached end-of-life, and updates all configuration and documentation to reflect Python 3.10+ as the minimum supported version. This simplifies dependency constraints and aligns with current Python support lifecycle. ## Changes ### Configuration Updates - Updated `pyproject.toml`: - Changed `requires-python` from `">=3.9"` to `">=3.10"` - Removed `"Programming Language :: Python :: 3.9"` trove classifier - Updated Ruff `target-version` from `"py39"` to `"py310"` - Updated Black `target-version` from `["py39"]` to `["py310"]` - Simplified dependency constraints by removing Python 3.9-specific conditions: - `pandas-stubs`: Removed Python 3.8-3.9 fallback, now uses single version constraint - `numpy`: Removed Python 3.8-3.9 fallback, now uses single version constraint - `pytest-benchmark`: Simplified condition from `python_version>='3.9' and python_version<'4.0'` to `python_version<'4.0'` - `sphinx`: Simplified condition from `python_version>='3.9' and python_version<'3.11'` to `python_version<'3.11'` - `myst-parser`: Removed Python 3.9-3.10 fallback, now uses single version constraint - `grpcio`: Simplified condition from `python_version>='3.8' and python_version<'3.11'` to `python_version<'3.11'` - `pandas`: Simplified condition from `python_version>='3.9' and python_version<'3.13'` to `python_version<'3.13'` ### Documentation Updates - Updated `README.md`: Changed prerequisites from "Python 3.9 and greater" to "Python 3.10 and greater", and updated tested versions from "3.9 to 3.13" to "3.10 to 3.13" - Updated `docs/index.rst`: Changed prerequisites from "Python 3.9 and greater" to "Python 3.10 and greater", and updated tested versions from "3.9 to 3.13" to "3.10 to 3.13" - Updated `docs/upgrading.md`: Added breaking change note in the 7.x section documenting the removal of Python 3.9 support ## Breaking Changes ⚠️ **Python 3.9 is no longer supported.** Users must upgrade to Python 3.10 or later to use this version of the SDK. ## Impact - **Users on Python 3.9**: Must upgrade to Python 3.10+ to continue using the SDK - **Dependency resolution**: Simplified constraints may allow newer package versions to be installed - **CI/CD**: No changes needed as workflows already use parameterized Python versions (3.10, 3.11, 3.12, 3.13) ## Rationale Python 3.9 reached end-of-life on October 2, 2025. Dropping support allows us to: - Simplify dependency management by removing version-specific constraints - Take advantage of Python 3.10+ features and improvements - Reduce maintenance burden by focusing on actively supported Python versions - Align with the Python community's support lifecycle ## Files Changed - `pyproject.toml` - `README.md` - `docs/index.rst` - `docs/upgrading.md`
1 parent 0815012 commit 470f57b

File tree

4 files changed

+41
-534
lines changed

4 files changed

+41
-534
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ For notes on changes between major versions, see [Upgrading](./docs/upgrading.md
1919

2020
## Prerequisites
2121

22-
- The Pinecone Python SDK is compatible with Python 3.9 and greater. It has been tested with CPython versions from 3.9 to 3.13.
22+
- The Pinecone Python SDK is compatible with Python 3.10 and greater. It has been tested with CPython versions from 3.10 to 3.13.
2323
- Before you can use the Pinecone SDK, you must sign up for an account and find your API key in the Pinecone console dashboard at [https://app.pinecone.io](https://app.pinecone.io).
2424

2525
## Installation

docs/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ For notes on changes between major versions, see [Upgrading](./docs/upgrading.md
7171
Prerequisites
7272
=============
7373

74-
* The Pinecone Python SDK is compatible with Python 3.9 and greater. It has been tested with CPython versions from 3.9 to 3.13.
74+
* The Pinecone Python SDK is compatible with Python 3.10 and greater. It has been tested with CPython versions from 3.10 to 3.13.
7575
* Before you can use the Pinecone SDK, you must sign up for an account and find your API key in the Pinecone console dashboard at `https://app.pinecone.io <https://app.pinecone.io>`_.
7676

7777
Installation

pyproject.toml

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "pinecone"
33
version = "7.3.0"
44
description = "Pinecone client and SDK"
55
readme = "README.md"
6-
requires-python = ">=3.9"
6+
requires-python = ">=3.10"
77
license = { text = "Apache-2.0" }
88
authors = [
99
{ name = "Pinecone Systems, Inc.", email = "[email protected]" }
@@ -17,7 +17,6 @@ classifiers = [
1717
"Intended Audience :: Science/Research",
1818
"Intended Audience :: System Administrators",
1919
"Operating System :: OS Independent",
20-
"Programming Language :: Python :: 3.9",
2120
"Programming Language :: Python :: 3.10",
2221
"Programming Language :: Python :: 3.11",
2322
"Programming Language :: Python :: 3.12",
@@ -40,7 +39,7 @@ dependencies = [
4039

4140
[project.optional-dependencies]
4241
grpc = [
43-
"grpcio>=1.44.0,<1.59.0; python_version>='3.8' and python_version<'3.11'",
42+
"grpcio>=1.44.0,<1.59.0; python_version<'3.11'",
4443
"grpcio>=1.59.0,<1.68.0; python_version>='3.11' and python_version<'3.13'",
4544
"grpcio>=1.68.0; python_version>='3.13'",
4645
"googleapis-common-protos>=1.66.0",
@@ -56,36 +55,33 @@ types = [
5655
"mypy>=1.6.1,<2.0.0",
5756
"types-urllib3>=1.26.25.14,<1.27.0.0",
5857
"grpc-stubs>=1.53.0.3,<1.54.0.0",
59-
"pandas-stubs>=2.1.1.230928,<2.2.0.0; python_version>='3.9'",
60-
"pandas-stubs>=1.5.3.230321,<1.6.0.0; python_version>='3.8' and python_version<'3.9'",
58+
"pandas-stubs>=2.1.1.230928,<2.2.0.0",
6159
"types-tqdm>=4.66.0.3,<4.67.0.0",
6260
"types-protobuf>=4.24.0.4,<4.25.0.0",
6361
"types-python-dateutil>=2.9.0.20241003",
6462
]
6563
dev = [
6664
"pre-commit>=3.0.0,<4.0.0",
67-
"numpy>=1.22; python_version>='3.9'",
68-
"numpy>=1.21,<1.22; python_version>='3.8' and python_version<'3.9'",
69-
"pandas>=1.3.5,<2.2.3; python_version>='3.9' and python_version<'3.13'",
65+
"numpy>=1.22",
66+
"pandas>=1.3.5,<2.2.3; python_version<'3.13'",
7067
"pandas>=2.2.3; python_version>='3.13'",
7168
"pytest==8.2.0",
7269
"pytest-asyncio>=0.25.2,<0.26.0",
7370
"pytest-cov==2.10.1",
7471
"pytest-mock==3.6.1",
7572
"pytest-retry>=1.7.0,<2.0.0",
7673
"pytest-timeout==2.2.0",
77-
"pytest-benchmark==5.0.0; python_version>='3.9' and python_version<'4.0'",
74+
"pytest-benchmark==5.0.0; python_version<'4.0'",
7875
"urllib3_mock==0.3.3",
7976
"responses>=0.8.1",
8077
"ruff>=0.9.3,<0.10.0",
8178
"beautifulsoup4>=4.13.3,<5.0.0",
8279
"vprof>=0.38,<0.39",
8380
"tuna>=0.5.11,<0.6.0",
8481
"python-dotenv>=1.1.0,<2.0.0",
85-
"sphinx>=7.4.7,<8.0.0; python_version>='3.9' and python_version<'3.11'",
82+
"sphinx>=7.4.7,<8.0.0; python_version<'3.11'",
8683
"sphinx>=8.2.3,<9.0.0; python_version>='3.11'",
87-
"myst-parser>=3.0.1,<4.0.0; python_version>='3.9' and python_version<'3.10'",
88-
"myst-parser>=4.0.1,<5.0.0; python_version>='3.10'",
84+
"myst-parser>=4.0.1,<5.0.0",
8985
]
9086

9187
[project.scripts]
@@ -124,7 +120,7 @@ exclude = [
124120

125121
line-length = 100
126122
indent-width = 4
127-
target-version = "py39"
123+
target-version = "py310"
128124

129125
[tool.ruff.lint]
130126
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
@@ -161,4 +157,4 @@ docstring-code-line-length = "dynamic"
161157

162158
[tool.black]
163159
line-length = 100
164-
target-version = ["py39"]
160+
target-version = ["py310"]

0 commit comments

Comments
 (0)