diff --git a/.ci/install.sh b/.ci/install.sh index 30ff916a02e..1eb098be9c1 100755 --- a/.ci/install.sh +++ b/.ci/install.sh @@ -37,8 +37,7 @@ python3 -m pip install -U pytest-timeout python3 -m pip install pyroma if [[ $(uname) != CYGWIN* ]]; then - # TODO Update condition when NumPy supports 3.13 - if ! [[ "$GHA_PYTHON_VERSION" == "3.13" ]]; then python3 -m pip install numpy ; fi + python3 -m pip install numpy # PyQt6 doesn't support PyPy3 if [[ $GHA_PYTHON_VERSION == 3.* ]]; then diff --git a/.github/workflows/macos-install.sh b/.github/workflows/macos-install.sh index ae346e8b6c3..d35cfcd3124 100755 --- a/.github/workflows/macos-install.sh +++ b/.github/workflows/macos-install.sh @@ -25,9 +25,7 @@ python3 -m pip install -U pytest python3 -m pip install -U pytest-cov python3 -m pip install -U pytest-timeout python3 -m pip install pyroma - -# TODO Update condition when NumPy supports 3.13 -if ! [[ "$GHA_PYTHON_VERSION" == "3.13" ]]; then python3 -m pip install numpy ; fi +python3 -m pip install numpy # extra test images pushd depends && ./install_extra_test_images.sh && popd diff --git a/.github/workflows/wheels-test.sh b/.github/workflows/wheels-test.sh index a3376ac929c..3fbf3be695b 100755 --- a/.github/workflows/wheels-test.sh +++ b/.github/workflows/wheels-test.sh @@ -12,7 +12,7 @@ elif [ "${AUDITWHEEL_POLICY::9}" == "musllinux" ]; then else yum install -y fribidi fi -if [ "${AUDITWHEEL_POLICY::9}" != "musllinux" ] && !([[ "$OSTYPE" == "darwin"* ]] && [[ $(python3 --version) == *"3.13."* ]]); then +if [ "${AUDITWHEEL_POLICY::9}" != "musllinux" ]; then python3 -m pip install numpy fi diff --git a/docs/installation/newer-versions.csv b/docs/installation/newer-versions.csv index ff545511573..19816af58da 100644 --- a/docs/installation/newer-versions.csv +++ b/docs/installation/newer-versions.csv @@ -1,9 +1,9 @@ -Python,3.12,3.11,3.10,3.9,3.8,3.7,3.6,3.5 -Pillow >= 11,Yes,Yes,Yes,Yes,,,, -Pillow >= 10.1,Yes,Yes,Yes,Yes,Yes,,, -Pillow 10.0,,Yes,Yes,Yes,Yes,,, -Pillow 9.3 - 9.5,,Yes,Yes,Yes,Yes,Yes,, -Pillow 9.0 - 9.2,,,Yes,Yes,Yes,Yes,, -Pillow 8.3.2 - 8.4,,,Yes,Yes,Yes,Yes,Yes, -Pillow 8.0 - 8.3.1,,,,Yes,Yes,Yes,Yes, -Pillow 7.0 - 7.2,,,,,Yes,Yes,Yes,Yes +Python,3.13,3.12,3.11,3.10,3.9,3.8,3.7,3.6,3.5 +Pillow >= 11,Yes,Yes,Yes,Yes,Yes,,,, +Pillow 10.1 - 10.4,,Yes,Yes,Yes,Yes,Yes,,, +Pillow 10.0,,,Yes,Yes,Yes,Yes,,, +Pillow 9.3 - 9.5,,,Yes,Yes,Yes,Yes,Yes,, +Pillow 9.0 - 9.2,,,,Yes,Yes,Yes,Yes,, +Pillow 8.3.2 - 8.4,,,,Yes,Yes,Yes,Yes,Yes, +Pillow 8.0 - 8.3.1,,,,,Yes,Yes,Yes,Yes, +Pillow 7.0 - 7.2,,,,,,Yes,Yes,Yes,Yes diff --git a/docs/releasenotes/11.0.0.rst b/docs/releasenotes/11.0.0.rst index e16304e61b6..964423ae035 100644 --- a/docs/releasenotes/11.0.0.rst +++ b/docs/releasenotes/11.0.0.rst @@ -67,7 +67,11 @@ TODO Other Changes ============= -TODO -^^^^ +Python 3.13 +^^^^^^^^^^^ -TODO +Pillow 10.4.0 had wheels built against Python 3.13 beta, available as a preview to help +others prepare for 3.13, and to ensure Pillow could be used immediately at the release +of 3.13.0 final (2024-10-01, :pep:`719`). + +Pillow 11.0.0 now officially supports Python 3.13. diff --git a/pyproject.toml b/pyproject.toml index 0db5d581597..700d5e7fec4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Multimedia :: Graphics", @@ -135,6 +136,9 @@ lint.isort.required-imports = [ "from __future__ import annotations", ] +[tool.pyproject-fmt] +max_supported_python = "3.13" + [tool.pytest.ini_options] addopts = "-ra --color=yes" testpaths = [ diff --git a/setup.py b/setup.py index 0abfaaddc5b..b26852b0b07 100644 --- a/setup.py +++ b/setup.py @@ -43,7 +43,7 @@ def get_version(): ZLIB_ROOT = None FUZZING_BUILD = "LIB_FUZZING_ENGINE" in os.environ -if sys.platform == "win32" and sys.version_info >= (3, 13): +if sys.platform == "win32" and sys.version_info >= (3, 14): import atexit atexit.register( diff --git a/tox.ini b/tox.ini index 39d3cf34b68..18941523785 100644 --- a/tox.ini +++ b/tox.ini @@ -3,7 +3,7 @@ requires = tox>=4.2 env_list = lint - py{py3, 312, 311, 310, 39} + py{py3, 313, 312, 311, 310, 39} [testenv] deps =