diff --git a/.appveyor.yml b/.appveyor.yml index 63801100307d..c58b8e7812e2 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -22,10 +22,10 @@ environment: --cov-report= --cov=lib --log-level=DEBUG matrix: - - PYTHON_VERSION: "3.8" + - PYTHON_VERSION: "3.9" CONDA_INSTALL_LOCN: "C:\\Miniconda3-x64" TEST_ALL: "no" - - PYTHON_VERSION: "3.9" + - PYTHON_VERSION: "3.10" CONDA_INSTALL_LOCN: "C:\\Miniconda3-x64" TEST_ALL: "no" diff --git a/.circleci/config.yml b/.circleci/config.yml index 9c1f09172060..d79f244e052c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -205,9 +205,9 @@ commands: # jobs: - docs-python38: + docs-python39: docker: - - image: cimg/python:3.8 + - image: cimg/python:3.9 resource_class: large steps: - checkout @@ -250,4 +250,4 @@ workflows: jobs: # NOTE: If you rename this job, then you must update the `if` condition # and `circleci-jobs` option in `.github/workflows/circleci.yml`. - - docs-python38 + - docs-python39 diff --git a/.github/workflows/cibuildsdist.yml b/.github/workflows/cibuildsdist.yml index d583fe1cfbcb..b322f8ecb212 100644 --- a/.github/workflows/cibuildsdist.yml +++ b/.github/workflows/cibuildsdist.yml @@ -37,7 +37,7 @@ jobs: strategy: matrix: os: [ubuntu-20.04] - python-version: ['3.8', '3.9', '3.10', '3.11'] + python-version: ['3.9', '3.10', '3.11'] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/cibuildwheel.yml b/.github/workflows/cibuildwheel.yml index 9e55193f82d2..da40faf39de4 100644 --- a/.github/workflows/cibuildwheel.yml +++ b/.github/workflows/cibuildwheel.yml @@ -100,23 +100,10 @@ jobs: MPL_DISABLE_FH4: "yes" CIBW_ARCHS: ${{ matrix.cibw_archs }} - - name: Build wheels for CPython 3.8 - uses: pypa/cibuildwheel@v2.11.4 - env: - CIBW_BUILD: "cp38-*" - CIBW_SKIP: "*-musllinux*" - CIBW_MANYLINUX_X86_64_IMAGE: manylinux2010 - CIBW_MANYLINUX_I686_IMAGE: manylinux2010 - CIBW_BEFORE_BUILD: >- - pip install certifi numpy==1.19.2 && - git clean -fxd build - MPL_DISABLE_FH4: "yes" - CIBW_ARCHS: ${{ matrix.cibw_archs }} - - name: Build wheels for PyPy uses: pypa/cibuildwheel@v2.11.4 env: - CIBW_BUILD: "pp38-* pp39-*" + CIBW_BUILD: "pp39-*" CIBW_SKIP: "*-musllinux*" CIBW_BEFORE_BUILD: >- pip install certifi oldest-supported-numpy && diff --git a/.github/workflows/circleci.yml b/.github/workflows/circleci.yml index 3dbb3b2b377e..6c8e176ce1e8 100644 --- a/.github/workflows/circleci.yml +++ b/.github/workflows/circleci.yml @@ -3,7 +3,7 @@ name: "CircleCI artifact handling" on: [status] jobs: circleci_artifacts_redirector_job: - if: "${{ github.event.context == 'ci/circleci: docs-python38' }}" + if: "${{ github.event.context == 'ci/circleci: docs-python39' }}" permissions: statuses: write runs-on: ubuntu-latest @@ -14,11 +14,11 @@ jobs: with: repo-token: ${{ secrets.GITHUB_TOKEN }} artifact-path: 0/doc/build/html/index.html - circleci-jobs: docs-python38 + circleci-jobs: docs-python39 job-title: View the built docs post_warnings_as_review: - if: "${{ github.event.context == 'ci/circleci: docs-python38' }}" + if: "${{ github.event.context == 'ci/circleci: docs-python39' }}" permissions: contents: read checks: write diff --git a/.github/workflows/reviewdog.yml b/.github/workflows/reviewdog.yml index cd862f11f1d6..659eedb8d383 100644 --- a/.github/workflows/reviewdog.yml +++ b/.github/workflows/reviewdog.yml @@ -17,7 +17,7 @@ jobs: - name: Set up Python 3 uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: 3.9 - name: Install flake8 run: pip3 install -r requirements/testing/flake8.txt diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 78dfefdbe7aa..c66ccc0203cf 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -37,27 +37,24 @@ jobs: include: - name-suffix: "(Minimum Versions)" os: ubuntu-20.04 - python-version: 3.8 + python-version: 3.9 extra-requirements: '-c requirements/testing/minver.txt' - pyqt5-ver: '==5.11.2 sip==5.0.0' # oldest versions with a Py3.8 wheel. + pyqt5-ver: '==5.12.2 sip==5.0.0' # oldest versions with a Py3.9 wheel. pyqt6-ver: '==6.1.0 PyQt6-Qt6==6.1.0' - pyside2-ver: '==5.14.0' # oldest version with working Py3.8 wheel. + pyside2-ver: '==5.15.1' # oldest version with working Py3.9 wheel. pyside6-ver: '==6.0.0' delete-font-cache: true - - os: ubuntu-20.04 - python-version: 3.8 - extra-requirements: '-r requirements/testing/extra.txt' - CFLAGS: "-fno-lto" # Ensure that disabling LTO works. - os: ubuntu-20.04 python-version: 3.9 extra-requirements: '-r requirements/testing/extra.txt' + CFLAGS: "-fno-lto" # Ensure that disabling LTO works. - os: ubuntu-20.04 python-version: '3.10' extra-requirements: '-r requirements/testing/extra.txt' - os: ubuntu-20.04 python-version: '3.11' - os: macos-latest - python-version: 3.8 + python-version: 3.9 steps: - uses: actions/checkout@v3 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 640136a00e9b..bef44758e972 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -38,33 +38,33 @@ stages: - job: Pytest strategy: matrix: - Linux_py38: - vmImage: 'ubuntu-20.04' # keep one job pinned to the oldest image - python.version: '3.8' Linux_py39: - vmImage: 'ubuntu-latest' + vmImage: 'ubuntu-20.04' # keep one job pinned to the oldest image python.version: '3.9' Linux_py310: vmImage: 'ubuntu-latest' python.version: '3.10' - macOS_py38: - vmImage: 'macOS-latest' - python.version: '3.8' + Linux_py311: + vmImage: 'ubuntu-latest' + python.version: '3.11' macOS_py39: vmImage: 'macOS-latest' python.version: '3.9' macOS_py310: vmImage: 'macOS-latest' python.version: '3.10' - Windows_py38: - vmImage: 'windows-2019' # keep one job pinned to the oldest image - python.version: '3.8' + macOS_py310: + vmImage: 'macOS-latest' + python.version: '3.11' Windows_py39: - vmImage: 'windows-latest' + vmImage: 'windows-2019' # keep one job pinned to the oldest image python.version: '3.9' Windows_py310: vmImage: 'windows-latest' python.version: '3.10' + Windows_py311: + vmImage: 'windows-latest' + python.version: '3.11' maxParallel: 4 pool: vmImage: '$(vmImage)' diff --git a/doc/api/next_api_changes/development/24919-KS.rst b/doc/api/next_api_changes/development/24919-KS.rst new file mode 100644 index 000000000000..29cf1db12955 --- /dev/null +++ b/doc/api/next_api_changes/development/24919-KS.rst @@ -0,0 +1,18 @@ +Increase to minimum supported versions of dependencies +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For Matplotlib 3.8, the :ref:`minimum supported versions ` are +being bumped: + ++------------+-----------------+---------------+ +| Dependency | min in mpl3.7 | min in mpl3.8 | ++============+=================+===============+ +| Python | 3.8 | 3.9 | ++------------+-----------------+---------------+ +| kiwisolver | 1.0.1 | 1.3.1 | ++------------+-----------------+---------------+ +| Pillow | 6.2.1 | 8.0 | ++------------+-----------------+---------------+ + +This is consistent with our :ref:`min_deps_policy` and `NEP29 +`__ diff --git a/doc/devel/dependencies.rst b/doc/devel/dependencies.rst index 4463b10b679a..0f2eeb5cf86f 100644 --- a/doc/devel/dependencies.rst +++ b/doc/devel/dependencies.rst @@ -15,15 +15,15 @@ When installing through a package manager like ``pip`` or ``conda``, the mandatory dependencies are automatically installed. This list is mainly for reference. -* `Python `_ (>= 3.8) +* `Python `_ (>= 3.9) * `contourpy `_ (>= 1.0.1) * `cycler `_ (>= 0.10.0) * `dateutil `_ (>= 2.7) * `fontTools `_ (>= 4.22.0) -* `kiwisolver `_ (>= 1.0.1) +* `kiwisolver `_ (>= 1.3.1) * `NumPy `_ (>= 1.20) * `packaging `_ (>= 20.0) -* `Pillow `_ (>= 6.2) +* `Pillow `_ (>= 8.0) * `pyparsing `_ (>= 2.3.1) * `setuptools `_ * `pyparsing `_ (>= 2.3.1) @@ -180,7 +180,6 @@ Minimum pip / manylinux support (linux) Matplotlib publishes `manylinux wheels `_ which have a minimum version of pip which will recognize the wheels -- Python 3.8: ``manylinx2010`` / pip >= 19.0 - Python 3.9+: ``manylinx2014`` / pip >= 19.3 In all cases the required version of pip is embedded in the CPython source. diff --git a/lib/matplotlib/tests/test_getattr.py b/lib/matplotlib/tests/test_getattr.py index 8fcb981746b2..a34e82ed81ba 100644 --- a/lib/matplotlib/tests/test_getattr.py +++ b/lib/matplotlib/tests/test_getattr.py @@ -18,6 +18,7 @@ @pytest.mark.parametrize('module_name', module_names) @pytest.mark.filterwarnings('ignore::DeprecationWarning') +@pytest.mark.filterwarnings('ignore::ImportWarning') def test_getattr(module_name): """ Test that __getattr__ methods raise AttributeError for unknown keys. diff --git a/requirements/testing/extra.txt b/requirements/testing/extra.txt index 8d314a141218..6058d3dcb22c 100644 --- a/requirements/testing/extra.txt +++ b/requirements/testing/extra.txt @@ -1,4 +1,4 @@ -# Extra pip requirements for the Python 3.8+ builds +# Extra pip requirements for the Python 3.9+ builds --prefer-binary ipykernel diff --git a/requirements/testing/minver.txt b/requirements/testing/minver.txt index 2eb2f958af96..bcc19d8bc07f 100644 --- a/requirements/testing/minver.txt +++ b/requirements/testing/minver.txt @@ -2,11 +2,11 @@ contourpy==1.0.1 cycler==0.10 -kiwisolver==1.0.1 +kiwisolver==1.3.1 importlib-resources==3.2.0 numpy==1.20.0 packaging==20.0 -pillow==6.2.1 +pillow==8.0.0 pyparsing==2.3.1 python-dateutil==2.7 fonttools==4.22.0 diff --git a/setup.py b/setup.py index 490850ad6203..afef9262c808 100644 --- a/setup.py +++ b/setup.py @@ -8,8 +8,8 @@ # and/or pip. import sys -py_min_version = (3, 8) # minimal supported python version -since_mpl_version = (3, 6) # py_min_version is required since this mpl version +py_min_version = (3, 9) # minimal supported python version +since_mpl_version = (3, 8) # py_min_version is required since this mpl version if sys.version_info < py_min_version: error = """ @@ -293,7 +293,6 @@ def make_release_tree(self, base_dir, files): 'License :: OSI Approved :: Python Software Foundation License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11',