gyn*_*ics 21 python pyaudio python-3.x
当我尝试在 python-3.10.1 virtualenv(使用 python-3.9.0 venv 创建并升级)中使用 PyAudio-0.2.11 播放波形文件时,我收到了一个异常,没有播放任何内容,其他的一切正常。
Exception in thread WavPlayer:rsrc/sound.wav:
Traceback (most recent call last):
File "/usr/lib/python3.10/threading.py", line 1009, in _bootstrap_inner
self.run()
File "/Code/py/tetris/tetris.py", line 39, in run
self.play()
File "/Code/py/tetris/tetris.py", line 35, in play
self.stream.write(data)
File "/Code/py/tetris/.venv/lib/python3.10/site-packages/pyaudio.py", line 584, in write
pa.write_stream(self._stream, frames, num_frames,
SystemError: PY_SSIZE_T_CLEAN macro must be defined for '#' formats
Run Code Online (Sandbox Code Playgroud)
我不知道'#' format代表什么,我确信我的代码与 C API 无关,但它在 python-3.9.x 下运行良好,这是 PyAudio 库本身的问题吗?我该如何解决这个问题?
ske*_*keh 19
不幸的是,Python 3.10 中引入了重大更改(请参阅bpo-40943和PEP-0353),因此 PyAudio 需要更新。
编辑:自 PyAudio 0.2.12 以来,这已在上游修复!将下面的临时内容留给后代,但现在只需要一个简单的版本升级即可。
我已经向上游提交了修复程序,但由于该项目自 2017 年以来就没有更新过,我不太确定它能多快得到审核。
与此同时,您可以自由地从源代码构建我的分支并使用它:)
尸检。
正如 @skeh 所指出的,从Python 3.10开始,一些(向后兼容)功能被故意禁用。这意味着某些扩展模块将不再在OOTB 中工作。
检查[GitHub]:python/cpython - PEP 353:当未定义 PY_SSIZE_T_CLEAN 时,删除对 PyArg_ParseTuple()“#”格式的支持以获取更多详细信息。
PyAudio ( v0.2.11 ) 就是这样的模块之一。v0.2.12
中的问题已得到修复(同时发布)。
Python 3. 11 .whl未在[PyPI] 上发布:PyAudio 0.2.12 -在应答时下载文件(它们是后来添加的)。
我构建了它们并将其放置在[GitHub]:CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/PyAudio/v0.2.12。
还分叉了(原始)PyAudio 存储库:[GitHub]:CristiFati/pyaudio - PyAudio
另一个包上有类似的问题:[SO]: Can't install pyo using pip (@CristiFati's answer)。
| 归档时间: |
|
| 查看次数: |
16987 次 |
| 最近记录: |