
Your Pycord bot used to build without a problem. Now pip install stops with "No matching distribution found for py-cord", or the install goes through and the bot dies on import discord with a missing audioop module. You may not have changed a thing: if your Dockerfile says FROM python:3-slim, the Python inside it is now 3.15. Both errors come from one line in py-cord's package metadata. Here is what that line says, how to confirm it is your problem, and three fixes.
Quick answer: py-cord won't install on Python 3.15 because py-cord 2.8.1, the newest release on 3 November 2026, declares Requires-Python: <3.15,>=3.10. With py-cord==2.8.1 in requirements.txt, pip stops with "No matching distribution found". With an unpinned py-cord, pip quietly installs 2.6.1 from September 2024, which crashes with ModuleNotFoundError: No module named 'audioop'. Run the bot on Python 3.14 (in Docker FROM python:3.14-slim, because python:3, python:slim and python:latest now point to 3.15.2), keep py-cord pinned, and upgrade once a py-cord release supports 3.15. Moving to discord.py, disnake or nextcord also gets past pip, but means rewriting your commands.
Why pip refuses py-cord on Python 3.15
Python 3.15.0 came out on 9 October 2026 and 3.15.2 on 25 October. Every py-cord release since 2.7.0 caps the Python version in its metadata, and pip skips any release whose Requires-Python excludes the interpreter it runs under. This is what PyPI lists for the recent releases:
| py-cord release | Uploaded | Requires-Python | On Python 3.15 |
|---|---|---|---|
| 2.6.1 | 15 Sep 2024 | >=3.8 | Installs, then crashes on import |
| 2.7.0 to 2.7.2 | Dec 2025 to Apr 2026 | >=3.10, <3.14 | Refused |
| 2.8.0 | 18 May 2026 | >=3.10, <3.15 | Refused |
| 2.8.1 | 25 Jul 2026 | >=3.10, <3.15 | Refused |
The cap matches the Python versions in py-cord's test matrix, 3.10 to 3.14; it does not point to a known bug. The maintainers track 3.15 in issue #3247 under the 2.9.0rc1 milestone, and the opening post says "there are no expected breaking changes that would impact us." An open pull request, #3400, changes the range to >=3.11, <3.16 and adds 3.15 to the test matrix. On 3 November 2026 it was not merged, and the pyproject.toml on py-cord's master branch still said <3.15.
The exact pip error on Python 3.15
With a pinned version
If requirements.txt pins py-cord==2.8.1 (or asks for py-cord>=2.7), the install fails and pip lists every release it skipped:
ERROR: Ignored the following versions that require a different python version: 2.7.0 Requires-Python <3.14,>=3.10; 2.7.0rc2 Requires-Python <3.14,>=3.9; 2.7.1 Requires-Python <3.14,>=3.10; 2.7.2 Requires-Python <3.14,>=3.10; 2.8.0 Requires-Python <3.15,>=3.10; 2.8.0rc1 Requires-Python <3.14,>=3.10; 2.8.0rc2 Requires-Python <3.14,>=3.10; 2.8.1 Requires-Python <3.15,>=3.10
ERROR: Could not find a version that satisfies the requirement py-cord==2.8.1 (from versions: 1.7.3, 2.0.0b1, 2.0.0b2, 2.0.0b3, 2.0.0b4, 2.0.0b5, 2.0.0b6, 2.0.0b7, 2.0.0rc1, 2.0.0, 2.0.1, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.2.0, 2.2.1, 2.2.2, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.4.0, 2.4.1, 2.5.0, 2.6.0, 2.6.1, 2.7.0rc1)
ERROR: No matching distribution found for py-cord==2.8.1
The first line is the useful one: it names the cap. We produced this output on 3 November 2026 with pip's --python-version 3.15 option (the command is below), not on a 3.15 install. Python 3.15.2 bundles pip 26.2.2, and pip's current source prints the same three messages.
Without a pin
With just py-cord in requirements.txt, nothing fails at install time. pip walks back to the newest final release without a cap, 2.6.1, and reports success. Then the bot starts:
File ".../site-packages/discord/player.py", line 29, in <module>
import audioop
ModuleNotFoundError: No module named 'audioop'
Python 3.13 removed audioop from the standard library (PEP 594), and py-cord 2.6.1 imports it on line 29 of discord/player.py, which import discord loads. A user posted this same traceback for 2.6.1 on Python 3.13 in issue #2763. Don't patch it with the audioop-lts package: the import then works, but you stay on a 2024 release without anything from 2.7 and 2.8.
Check which Python and py-cord you have
python --version
python -m pip show py-cord
Python 3.15.x together with Version: 2.6.1 is the silent downgrade. For a Docker image, check the base image itself:
docker run --rm python:3-slim python --version
On 3 November 2026 the official images file maps 3, 3-slim, slim, latest, 3-alpine and alpine to 3.15.2. A FROM python:3-slim line that gave you 3.14 before October now gives you 3.15.
To test a library against a Python version you don't have, ask pip for a dry run. Nothing is installed and the target folder is not even created:
python -m pip install --dry-run --target ./pip-test --python-version 3.15 --only-binary=:all: --no-deps py-cord
It ends with Would install py-cord-2.6.1. With --python-version 3.14 it says Would install py-cord-2.8.1.
Discord libraries and the Python versions they allow
| Library | Newest on PyPI | Uploaded | Requires-Python | Newest Python in its classifiers | pip on 3.15 |
|---|---|---|---|---|---|
| py-cord | 2.8.1 | 25 Jul 2026 | >=3.10, <3.15 | 3.14 | Refused |
| discord.py | 2.7.1 | 3 Mar 2026 | >=3.8 | 3.12 | Installs |
| disnake | 2.12.2 | 8 Oct 2026 | >=3.10 | 3.14 | Installs |
| nextcord | 3.2.0 | 21 May 2026 | >=3.12, <4.0 | 3.14 | Installs |
"Installs" means our dry run on 3 November resolved the library and its dependencies to ready-made wheels for Python 3.15 on Linux, including aiohttp 3.14.5, which ships 3.15 wheels. It does not mean the maintainers tested 3.15: none of the four lists 3.15 in its classifiers yet.
Fix 1: Pin Python 3.14 in your Dockerfile
Replace the moving tag with a minor version:
FROM python:3.14-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "bot.py"]
Rebuild with --pull, which makes Docker fetch the base image again instead of reusing a copy it already has:
docker build --pull -t my-bot .
3.14-slim follows the 3.14 bugfix releases (3.14.10 on 3 November 2026). For a build that never changes underneath you, use 3.14.10-slim. Python 3.14 gets bugfix releases now and security fixes until its end of life in October 2030, so this is not a short workaround. Our Docker deployment guide covers compose files and environment variables.
Fix 2: Run Python 3.14 next to 3.15
If 3.15 is your system Python, keep it. Give the bot its own virtual environment on 3.14.
On Linux or macOS with uv, which downloads 3.14 if you don't have it:
uv python install 3.14
uv venv --python 3.14 .venv
source .venv/bin/activate
uv pip install -r requirements.txt
python bot.py
On Windows with the Python install manager (the py command):
py install 3.14
py -V:3.14 -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python bot.py
Then pin py-cord in requirements.txt, with py-cord[voice]==2.8.1 instead if your bot plays audio:
py-cord==2.8.1
With the pin, a 3.15 environment fails loudly at install time instead of handing you 2.6.1. The same goes for a bot host: on our Discord bot hosting you choose the runtime during setup and requirements.txt is installed when the bot starts, so the pin is what stops a silent downgrade.
Fix 3: Switch to a library that allows 3.15
discord.py, disnake and nextcord all accept 3.15 in their metadata. Switching is a code change, not a version bump. In discord.py, Pycord's @bot.slash_command and ctx.respond become @bot.tree.command and interaction.response.send_message, and Pycord's bridge commands become hybrid commands (@bot.hybrid_command), which work as a prefix and a slash command at once. Our Pycord vs discord.py comparison shows both styles side by side. Nextcord needs at least Python 3.12. Take this route if you were planning to move anyway. For 3.15 alone, fix 1 changes one line.
Two shortcuts to skip
pip install --ignore-requires-python py-cord==2.8.1tells pip to "Ignore the Requires-Python information" for every package in that command. That is fine for a throwaway test to see if your bot runs on 3.15, but not for a live bot: py-cord's test matrix stops at 3.14 until #3400 is merged.- Moving down to Python 3.10 is no fix either. 3.10 reached end of life on 1 October 2026, and #3400 raises py-cord's minimum to 3.11.
When py-cord adds Python 3.15 support
Watch issue #3247 and the release history on PyPI. When a new release shows a Requires-Python range that includes 3.15, put that version in your requirements.txt pin and move the Docker tag or virtual environment to 3.15. If #3400 lands as written, that release also needs Python 3.11 or newer.
FAQ
Does Pycord support Python 3.15? Not in a release yet. On 3 November 2026 the newest py-cord, 2.8.1, allows Python 3.10 to 3.14. Support is planned in issue #3247 for the 2.9.0rc1 milestone, and the maintainers expect no breaking changes.
Why does pip install py-cord 2.6.1 instead of the latest version?
Because your Python is 3.15. pip skips every release whose Requires-Python excludes your interpreter and takes the newest one left: 2.6.1 from September 2024, which only says >=3.8. It fails on import with No module named 'audioop'. Use Python 3.14 and pin py-cord==2.8.1.
How do I fix "No matching distribution found for py-cord"?
Read the "Ignored the following versions" line above it. If it lists Requires-Python <3.15, your environment runs 3.15: switch the virtual environment or Docker tag to 3.14 and run the install again. If your Python is older than 3.10, the minimum is the problem instead, and 3.14 fixes that too.
Which Python version should I use for a Discord bot right now? 3.14. Every library in the table accepts it, including py-cord 2.8.1, and it gets security fixes until October 2030.
Does discord.py work on Python 3.15?
pip installs discord.py 2.7.1 on 3.15, because it requires only Python 3.8 or newer, and on 3.13 and later it pulls in audioop-lts to replace the removed module. Its classifiers stop at 3.12, so test your bot on 3.15 before you move a live one.
Why did my Docker build break when I changed nothing?
python:3, python:3-slim, python:slim and python:latest are moving tags that follow the newest stable Python, which is 3.15.2 on 3 November 2026. Pin a minor version such as python:3.14-slim.
Sources
All opened on 3 November 2026:
- PyPI: py-cord (JSON), discord.py (JSON), disnake (JSON), nextcord (JSON), aiohttp, audioop-lts
- py-cord on GitHub: issue #3247 Python 3.15 support, pull request #3400, issue #2763 audioop on 3.13, pyproject.toml on master, player.py in v2.6.1
- Docker: official images file for python, docker buildx build reference
- Python: release cycle data, Python 3.15.2 release, What's New in Python 3.13, Using Python on Windows, ensurepip in 3.15.2
- pip: pip install reference, resolver error messages in factory.py
- Pycord docs: clients (Bot.slash_command), application commands (ctx.respond), bridge extension
- discord.py docs: commands extension API (Bot.tree, hybrid_command), interactions API (CommandTree.command, send_message)
- uv: Installing Python, Python environments, Managing packages