Skip to content

Commit f7f0175

Browse files
Merge pull request #504 from spotify/add-python-3.15
Add support for Python 3.15
2 parents a3f824f + 0271533 commit f7f0175

5 files changed

Lines changed: 51 additions & 5 deletions

File tree

.github/workflows/all.yml

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,14 @@ jobs:
2828
python-version: ${{ matrix.python-version }}
2929
- uses: actions/checkout@v4
3030
- name: Install Ruff
31+
# Pinned deliberately: Ruff 0.16.0 enables 413 rules by default, up from 59.
32+
# We don't set `lint.select` in pyproject.toml, so an unpinned upgrade silently
33+
# widened the rule set and surfaced 90 pre-existing findings. Bumping this pin
34+
# means adopting (or explicitly selecting away) the newer defaults first.
35+
# See: https://astral.sh/blog/ruff-v0.16.0
3136
run: |
3237
python -m pip install --upgrade pip
33-
pip install ruff
38+
pip install 'ruff==0.15.22'
3439
- name: Lint Python code
3540
run: ruff check ${{ github.workspace }}/pedalboard
3641
- name: Check Python formatting
@@ -545,6 +550,13 @@ jobs:
545550
cc: "ccache clang",
546551
cxx: "ccache clang++",
547552
}
553+
- {
554+
os: macos-15-intel,
555+
python-version: "3.15",
556+
compiler: "clang",
557+
cc: "ccache clang",
558+
cxx: "ccache clang++",
559+
}
548560
- {
549561
os: ubuntu-24.04,
550562
python-version: "3.10",
@@ -580,6 +592,13 @@ jobs:
580592
cc: "ccache gcc",
581593
cxx: "ccache g++",
582594
}
595+
- {
596+
os: ubuntu-24.04,
597+
python-version: "3.15",
598+
compiler: "gcc",
599+
cc: "ccache gcc",
600+
cxx: "ccache g++",
601+
}
583602
- {
584603
os: windows-latest,
585604
python-version: "3.10",
@@ -615,12 +634,21 @@ jobs:
615634
cc: "msvc",
616635
cxx: "msvc",
617636
}
637+
- {
638+
os: windows-latest,
639+
python-version: "3.15",
640+
compiler: "msvc",
641+
cc: "msvc",
642+
cxx: "msvc",
643+
}
618644
name: Test with Python ${{ matrix.python-version }} on ${{ matrix.os }}
619645
steps:
620646
- name: Set up Python ${{ matrix.python-version }}
621647
uses: actions/setup-python@v5
622648
with:
623649
python-version: ${{ matrix.python-version }}
650+
# Required while the newest Python in the matrix is still a release candidate:
651+
allow-prereleases: true
624652
- uses: actions/checkout@v4
625653
with:
626654
submodules: recursive
@@ -750,14 +778,16 @@ jobs:
750778
needs: [prime-asan-build-caches]
751779
strategy:
752780
matrix:
753-
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
781+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
754782
os: ["ubuntu-24.04"]
755783
name: Test with Python ${{ matrix.python-version }} + Address Sanitizer
756784
steps:
757785
- name: Set up Python ${{ matrix.python-version }}
758786
uses: actions/setup-python@v5
759787
with:
760788
python-version: ${{ matrix.python-version }}
789+
# Required while the newest Python in the matrix is still a release candidate:
790+
allow-prereleases: true
761791
- uses: actions/checkout@v4
762792
with:
763793
submodules: recursive
@@ -850,13 +880,16 @@ jobs:
850880
- { os: macos-15-intel, build: cp313-macosx_arm64 }
851881
- { os: macos-15-intel, build: cp314-macosx_arm64 }
852882
- { os: macos-15-intel, build: cp314t-macosx_arm64 }
883+
- { os: macos-15-intel, build: cp315-macosx_arm64 }
884+
- { os: macos-15-intel, build: cp315t-macosx_arm64 }
853885
# - { os: macos-15-intel, build: pp38-macosx_x86_64 }
854886
# - { os: macos-15-intel, build: pp39-macosx_x86_64 }
855887
- { os: windows-latest, build: cp310-win_amd64 }
856888
- { os: windows-latest, build: cp311-win_amd64 }
857889
- { os: windows-latest, build: cp312-win_amd64 }
858890
- { os: windows-latest, build: cp313-win_amd64 }
859891
- { os: windows-latest, build: cp314-win_amd64 }
892+
- { os: windows-latest, build: cp315-win_amd64 }
860893
# - { os: windows-latest, build: cp312-win32 }
861894
- { os: "ubuntu-24.04", build: cp310-manylinux_x86_64 }
862895
- { os: "ubuntu-24.04-arm", build: cp310-manylinux_aarch64 }
@@ -877,6 +910,9 @@ jobs:
877910
- { os: "ubuntu-24.04", build: cp314-manylinux_x86_64 }
878911
- { os: "ubuntu-24.04-arm", build: cp314-manylinux_aarch64 }
879912
- { os: "ubuntu-24.04-arm", build: cp314t-manylinux_aarch64 }
913+
- { os: "ubuntu-24.04", build: cp315-manylinux_x86_64 }
914+
- { os: "ubuntu-24.04-arm", build: cp315-manylinux_aarch64 }
915+
- { os: "ubuntu-24.04-arm", build: cp315t-manylinux_aarch64 }
880916
name: Build wheel for ${{ matrix.build }}
881917
steps:
882918
- uses: actions/checkout@v4
@@ -887,7 +923,9 @@ jobs:
887923
with:
888924
python-version: "3.13"
889925
- name: Install cibuildwheel
890-
run: python -m pip install 'cibuildwheel>=3.0,<4'
926+
# cibuildwheel 4.2.0 is the first release to build CPython 3.15 wheels by
927+
# default (using 3.15.0rc1, which is ABI-compatible with the final release).
928+
run: python -m pip install 'cibuildwheel>=4.2,<5'
891929
- name: Build wheels
892930
run: python -m cibuildwheel --output-dir wheelhouse
893931
env:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ If you are new to Python, follow [INSTALLATION.md](https://github.com/spotify/pe
5656

5757
### Compatibility
5858

59-
`pedalboard` is thoroughly tested with Python 3.10, 3.11, 3.12, 3.13, and 3.14.
59+
`pedalboard` is thoroughly tested with Python 3.10, 3.11, 3.12, 3.13, 3.14, and 3.15.
6060

6161
- Linux
6262
- Tested heavily in production use cases at Spotify

pyproject.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ archs = ["x86_64", "arm64", "universal2"]
2222

2323
[tool.cibuildwheel.windows]
2424
archs = ["auto"]
25+
# cibuildwheel 4.0 made delvewheel the default repair step on Windows. Pedalboard
26+
# links its dependencies statically, so keep the pre-4.0 behaviour of not repairing.
27+
repair-wheel-command = ""
2528

2629
[[tool.cibuildwheel.overrides]]
2730
# Use apk instead of yum when building on Alpine Linux
@@ -50,6 +53,7 @@ classifiers = [
5053
"Programming Language :: Python :: 3.12",
5154
"Programming Language :: Python :: 3.13",
5255
"Programming Language :: Python :: 3.14",
56+
"Programming Language :: Python :: 3.15",
5357
]
5458
dependencies = ["numpy"]
5559
version = "0.9.24"

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ def build_extensions(self, *args, **kwargs):
493493
"Programming Language :: Python :: 3.12",
494494
"Programming Language :: Python :: 3.13",
495495
"Programming Language :: Python :: 3.14",
496+
"Programming Language :: Python :: 3.15",
496497
],
497498
ext_modules=[pedalboard_cpp],
498499
install_requires=["numpy"],

test-requirements.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ pip>22; python_version > '3.6'
99
pip>21; python_version < '3.7'
1010
wheel
1111

12-
numpy>=2.1.0rc1; python_version>="3.13"
12+
# NumPy 2.5.2 is the first release with CPython 3.15 wheels; without this floor,
13+
# pip could silently fall back to building an older NumPy from source on 3.15.
14+
numpy>=2.5.2; python_version>="3.15"
15+
numpy>=2.1.0rc1; python_version>="3.13" and python_version<"3.15"
1316
numpy>=2; python_version>="3.9" and python_version<"3.13"
1417
numpy<2; python_version<="3.8"
1518
tqdm

0 commit comments

Comments
 (0)