安装PyNaCl后仍出现Discord语音相关RuntimeError报错该如何解决
排查与解决步骤
1. 验证PyNaCl安装环境匹配
- 多数该类报错是因为PyNaCl安装到了其他Python环境,和运行机器人的环境不统一。在运行机器人的终端执行如下命令验证安装状态:
pip show pynacl - 如果无版本信息输出,说明安装路径错误。如果使用Python3,替换为
pip3 show pynacl验证;如果使用了虚拟环境,需要先激活对应虚拟环境再执行安装命令。
2. 安装带语音依赖的discord.py版本
- 单独安装PyNaCl容易出现版本和discord.py不兼容的问题,直接安装discord.py的语音配套依赖即可自动匹配正确版本的PyNaCl、opus等组件:
pip install -U discord.py[voice]
3. 补全系统层面依赖
Windows环境
- 安装微软VC++ 2015-2022可再发行包,之后重新执行PyNaCl安装命令。
Linux环境
- 先安装系统底层依赖库,再重新安装PyNaCl:
sudo apt update && sudo apt install libffi-dev libsodium-dev python3-devpip install -U pynacl
MacOS环境
- 先安装Homebrew,再执行:
brew install libsodiumpip install -U pynacl
4. 兼容版本降级
如果上述操作后仍报错,可尝试安装经过验证的稳定兼容版PyNaCl:pip install pynacl==1.5.0
补充:代码优化(非本次报错原因,可避免其他异常)
你当前的join命令缺少用户语音状态判断,用户未加入语音频道时会触发其他报错,可优化为:
@client.command() async def join(ctx): # 先判断调用者是否在语音频道 if not ctx.author.voice or not ctx.author.voice.channel: await ctx.send("请先加入一个语音频道后再调用该命令") return channel = ctx.author.voice.channel await channel.connect() await ctx.send(f"成功加入频道:{channel.name}")
内容的提问来源于stack exchange,提问作者AbuLeLe
相关产品推荐
相关产品推荐

