Skip to content

PYTHON-4828 - Drop Python 3.8 support #1902

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 17 additions & 27 deletions .evergreen/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2233,10 +2233,6 @@ axes:
values:
# Note: always display platform with python-version to avoid ambiguous display names.
# Linux
- id: "3.8"
display_name: "Python 3.8"
variables:
PYTHON_BINARY: "/opt/python/3.8/bin/python3"
- id: "3.9"
display_name: "Python 3.9"
variables:
Expand Down Expand Up @@ -2269,10 +2265,6 @@ axes:
- id: python-version-windows
display_name: "Python"
values:
- id: "3.8"
display_name: "Python 3.8"
variables:
PYTHON_BINARY: "C:/python/Python38/python.exe"
- id: "3.9"
display_name: "Python 3.9"
variables:
Expand All @@ -2297,10 +2289,8 @@ axes:
- id: python-version-windows-32
display_name: "Python"
values:
- id: "3.8"
display_name: "32-bit Python 3.8"
variables:
PYTHON_BINARY: "C:/python/32/Python38/python.exe"


- id: "3.9"
display_name: "32-bit Python 3.9"
variables:
Expand Down Expand Up @@ -2581,10 +2571,10 @@ buildvariants:
auth: "*"
ssl: "ssl"
pyopenssl: "*"
# Only test "noauth" with Python 3.8.
# Only test "noauth" with Python 3.9.
exclude_spec:
platform: rhel8
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "pypy3.9", "pypy3.10"]
python-version: ["3.10", "3.11", "3.12", "3.13", "pypy3.9", "pypy3.10"]
auth: "noauth"
ssl: "ssl"
pyopenssl: "*"
Expand Down Expand Up @@ -2716,7 +2706,7 @@ buildvariants:
matrix_spec:
platform: rhel7
# Python 3.10+ requires OpenSSL 1.1.1+
python-version: ["3.8", "3.9"]
python-version: ["3.9"]
auth-ssl: "*"
display_name: "OpenSSL 1.0.2 ${python-version} ${platform} ${auth-ssl}"
tasks:
Expand All @@ -2739,12 +2729,12 @@ buildvariants:
then:
add_tasks: *encryption-server-versions

# Storage engine tests on RHEL 8.4 (x86_64) with Python 3.8.
# Storage engine tests on RHEL 8.4 (x86_64) with Python 3.9.
- matrix_name: "tests-storage-engines"
matrix_spec:
platform: rhel8
storage-engine: "*"
python-version: 3.8
python-version: 3.9
display_name: "Storage ${storage-engine} ${python-version} ${platform}"
rules:
- if:
Expand Down Expand Up @@ -2774,12 +2764,12 @@ buildvariants:
- "test-3.6-standalone"
- "test-3.6-replica_set"

# enableTestCommands=0 tests on RHEL 8.4 (x86_64) with Python 3.8.
# enableTestCommands=0 tests on RHEL 8.4 (x86_64) with Python 3.9.
- matrix_name: "test-disableTestCommands"
matrix_spec:
platform: rhel8
disableTestCommands: "*"
python-version: "3.8"
python-version: "3.9"
display_name: "Disable test commands ${python-version} ${platform}"
tasks:
- ".latest"
Expand All @@ -2805,15 +2795,15 @@ buildvariants:
- matrix_name: "test-search-index-helpers"
matrix_spec:
platform: rhel8
python-version: "3.8"
python-version: "3.9"
display_name: "Search Index Helpers ${platform}"
tasks:
- name: "test_atlas_task_group_search_indexes"

- matrix_name: "tests-mod-wsgi"
matrix_spec:
platform: ubuntu-22.04
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
mod-wsgi-version: "*"
display_name: "${mod-wsgi-version} ${python-version} ${platform}"
tasks:
Expand All @@ -2825,15 +2815,15 @@ buildvariants:
- matrix_name: "mockupdb-tests"
matrix_spec:
platform: rhel8
python-version: 3.8
python-version: 3.9
display_name: "MockupDB Tests"
tasks:
- name: "mockupdb"

- matrix_name: "tests-doctests"
matrix_spec:
platform: rhel8
python-version: ["3.8"]
python-version: ["3.9"]
display_name: "Doctests ${python-version} ${platform}"
tasks:
- name: "doctests"
Expand Down Expand Up @@ -2873,7 +2863,7 @@ buildvariants:
- matrix_name: "data-lake-spec-tests"
matrix_spec:
platform: ubuntu-22.04
python-version: ["3.8", "3.10"]
python-version: ["3.9", "3.10"]
auth: "auth"
c-extensions: "*"
display_name: "Atlas Data Lake ${python-version} ${c-extensions}"
Expand All @@ -2883,7 +2873,7 @@ buildvariants:
- matrix_name: "stable-api-tests"
matrix_spec:
platform: rhel8
python-version: ["3.8", "3.10"]
python-version: ["3.9", "3.10"]
auth: "auth"
versionedApi: "*"
display_name: "Versioned API ${versionedApi} ${python-version}"
Expand All @@ -2896,7 +2886,7 @@ buildvariants:
- matrix_name: "ocsp-test"
matrix_spec:
platform: rhel8
python-version: ["3.8", "3.10", "pypy3.9", "pypy3.10"]
python-version: ["3.9", "3.10", "pypy3.9", "pypy3.10"]
mongodb-version: ["4.4", "5.0", "6.0", "7.0", "8.0", "latest"]
auth: "noauth"
ssl: "ssl"
Expand All @@ -2908,7 +2898,7 @@ buildvariants:
- matrix_name: "ocsp-test-windows"
matrix_spec:
platform: windows
python-version-windows: ["3.8", "3.10"]
python-version-windows: ["3.9", "3.10"]
mongodb-version: ["4.4", "5.0", "6.0", "7.0", "8.0", "latest"]
auth: "noauth"
ssl: "ssl"
Expand Down
32 changes: 16 additions & 16 deletions .evergreen/utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ set -o xtrace

find_python3() {
PYTHON=""
# Add a fallback system python3 if it is available and Python 3.8+.
if is_python_38 "$(command -v python3)"; then
# Add a fallback system python3 if it is available and Python 3.9+.
if is_python_39 "$(command -v python3)"; then
PYTHON="$(command -v python3)"
fi
# Find a suitable toolchain version, if available.
Expand All @@ -14,23 +14,23 @@ find_python3() {
if [ -d "/Library/Frameworks/Python.Framework/Versions/3.10" ]; then
PYTHON="/Library/Frameworks/Python.Framework/Versions/3.10/bin/python3"
# macos 10.14
elif [ -d "/Library/Frameworks/Python.Framework/Versions/3.8" ]; then
PYTHON="/Library/Frameworks/Python.Framework/Versions/3.8/bin/python3"
elif [ -d "/Library/Frameworks/Python.Framework/Versions/3.9" ]; then
PYTHON="/Library/Frameworks/Python.Framework/Versions/3.9/bin/python3"
fi
elif [ "Windows_NT" = "$OS" ]; then # Magic variable in cygwin
PYTHON="C:/python/Python38/python.exe"
PYTHON="C:/python/Python39/python.exe"
else
# Prefer our own toolchain, fall back to mongodb toolchain if it has Python 3.8+.
if [ -f "/opt/python/3.8/bin/python3" ]; then
PYTHON="/opt/python/3.8/bin/python3"
elif is_python_38 "$(command -v /opt/mongodbtoolchain/v4/bin/python3)"; then
# Prefer our own toolchain, fall back to mongodb toolchain if it has Python 3.9+.
if [ -f "/opt/python/3.9/bin/python3" ]; then
PYTHON="/opt/python/3.9/bin/python3"
elif is_python_39 "$(command -v /opt/mongodbtoolchain/v4/bin/python3)"; then
PYTHON="/opt/mongodbtoolchain/v4/bin/python3"
elif is_python_38 "$(command -v /opt/mongodbtoolchain/v3/bin/python3)"; then
elif is_python_39 "$(command -v /opt/mongodbtoolchain/v3/bin/python3)"; then
PYTHON="/opt/mongodbtoolchain/v3/bin/python3"
fi
fi
if [ -z "$PYTHON" ]; then
echo "Cannot test without python3.8+ installed!"
echo "Cannot test without python3.9+ installed!"
exit 1
fi
echo "$PYTHON"
Expand Down Expand Up @@ -96,15 +96,15 @@ testinstall () {
fi
}

# Function that returns success if the provided Python binary is version 3.8 or later
# Function that returns success if the provided Python binary is version 3.9 or later
# Usage:
# is_python_38 /path/to/python
# is_python_39 /path/to/python
# * param1: Python binary
is_python_38() {
is_python_39() {
if [ -z "$1" ]; then
return 1
elif $1 -c "import sys; exit(sys.version_info[:2] < (3, 8))"; then
# runs when sys.version_info[:2] >= (3, 8)
elif $1 -c "import sys; exit(sys.version_info[:2] < (3, 9))"; then
# runs when sys.version_info[:2] >= (3, 9)
return 0
else
return 1
Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/dist.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ jobs:
- uses: actions/setup-python@v5
with:
cache: 'pip'
python-version: 3.8
python-version: 3.9
cache-dependency-path: 'pyproject.toml'
allow-prereleases: true

Expand All @@ -79,13 +79,12 @@ jobs:
env:
CIBW_MANYLINUX_X86_64_IMAGE: manylinux1
CIBW_MANYLINUX_I686_IMAGE: manylinux1
CIBW_BUILD: "cp38-${{ matrix.buildplat[1] }} cp39-${{ matrix.buildplat[1] }}"
CIBW_BUILD: "cp39-${{ matrix.buildplat[1] }} cp39-${{ matrix.buildplat[1] }}"
run: python -m cibuildwheel --output-dir wheelhouse

- name: Assert all versions in wheelhouse
if: ${{ ! startsWith(matrix.buildplat[1], 'macos') }}
run: |
ls wheelhouse/*cp38*.whl
ls wheelhouse/*cp39*.whl
ls wheelhouse/*cp310*.whl
ls wheelhouse/*cp311*.whl
Expand All @@ -109,7 +108,7 @@ jobs:
- uses: actions/setup-python@v5
with:
# Build sdist on lowest supported Python
python-version: '3.8'
python-version: '3.9'

- name: Build SDist
run: |
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/test-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.8"
python-version: "3.9"
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
- name: Install Python dependencies
Expand Down Expand Up @@ -51,7 +51,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-20.04]
python-version: ["3.8", "pypy-3.9", "3.13"]
python-version: ["3.9", "pypy-3.9", "3.13"]
name: CPython ${{ matrix.python-version }}-${{ matrix.os }}
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -87,7 +87,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.8"
python-version: "3.9"
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
- name: Install dependencies
Expand All @@ -111,7 +111,7 @@ jobs:
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
# Build docs on lowest supported Python for furo
python-version: '3.8'
python-version: '3.9'
- name: Install dependencies
run: |
pip install -U pip hatch
Expand All @@ -129,7 +129,7 @@ jobs:
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
# Build docs on lowest supported Python for furo
python-version: '3.8'
python-version: '3.9'
- name: Install dependencies
run: |
pip install -U pip hatch
Expand All @@ -142,7 +142,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python: ["3.8", "3.11"]
python: ["3.9", "3.11"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand All @@ -167,7 +167,7 @@ jobs:
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
# Build sdist on lowest supported Python
python-version: '3.8'
python-version: '3.9'
- name: Build SDist
shell: bash
run: |
Expand Down Expand Up @@ -199,7 +199,7 @@ jobs:
cache: 'pip'
cache-dependency-path: 'sdist/test/pyproject.toml'
# Test sdist on lowest supported Python
python-version: '3.8'
python-version: '3.9'
- name: Start MongoDB
uses: supercharge/mongodb-github-action@1.11.0
- name: Run connect test from sdist
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ be of interest or that has already been addressed.

## Supported Interpreters

PyMongo supports CPython 3.8+ and PyPy3.9+. Language features not
PyMongo supports CPython 3.9+ and PyPy3.9+. Language features not
supported by all interpreters can not be used.

## Style Guide
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ package that is incompatible with PyMongo.

## Dependencies

PyMongo supports CPython 3.8+ and PyPy3.9+.
PyMongo supports CPython 3.9+ and PyPy3.9+.

Required dependencies:

Expand Down
5 changes: 5 additions & 0 deletions doc/changelog.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
Changelog
=========

Changes in Version 4.11.0
-------------------------

.. warning:: PyMongo 4.11 drops support for Python 3.8: Python 3.9+ or PyPy 3.9+ is now required.

Changes in Version 4.10.1
-------------------------

Expand Down
2 changes: 1 addition & 1 deletion doc/faq.rst
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ they are returned to the pool.
Does PyMongo support Python 3?
------------------------------

PyMongo supports CPython 3.8+ and PyPy3.9+. See the :doc:`python3` for details.
PyMongo supports CPython 3.9+ and PyPy3.9+. See the :doc:`python3` for details.

Does PyMongo support asynchronous frameworks like Gevent, asyncio, Tornado, or Twisted?
---------------------------------------------------------------------------------------
Expand Down
4 changes: 2 additions & 2 deletions doc/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ To upgrade using pip::
Dependencies
------------

PyMongo supports CPython 3.8+ and PyPy3.9+.
PyMongo supports CPython 3.9+ and PyPy3.9+.

Required dependencies
.....................
Expand Down Expand Up @@ -140,7 +140,7 @@ See `http://bugs.python.org/issue11623 <http://bugs.python.org/issue11623>`_
for a more detailed explanation.

**Lion (10.7) and newer** - PyMongo's C extensions can be built against
versions of Python 3.8+ downloaded from python.org. In all cases Xcode must be
versions of Python 3.9+ downloaded from python.org. In all cases Xcode must be
installed with 'UNIX Development Support'.

**Xcode 5.1**: Starting with version 5.1 the version of clang that ships with
Expand Down
2 changes: 1 addition & 1 deletion doc/python3.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Python 3 FAQ
What Python 3 versions are supported?
-------------------------------------

PyMongo supports CPython 3.8+ and PyPy3.9+.
PyMongo supports CPython 3.9+ and PyPy3.9+.

Are there any PyMongo behavior changes with Python 3?
-----------------------------------------------------
Expand Down
Loading
Loading