本文由 Claude 生成
1. 兩者的關係
- 沒有相依關係,是替代關係。
-
audioop:Python 標準庫中以 C 實作的音訊處理模組。- Python 3.11 標記棄用(PEP 594)
- Python 3.13 正式移除
-
pyaudioop:pydub 套件內附的純 Python 版本,API 與audioop相同,用來在沒有audioop時頂替,速度較慢。
2. pydub 的匯入邏輯
try:
import audioop
except ImportError:
import pyaudioop as audioop
先找標準庫的 audioop,找不到才退回 pyaudioop。
3. Python 3.13+ 的錯誤
ModuleNotFoundError: No module named 'pyaudioop'
原因
- 3.13 已移除
audioop,所以會進入 fallback。 -
import pyaudioop as audioop是絕對匯入,找不到位於pydub套件內的模組。
正確寫法應為:
from . import pyaudioop as audioop 就算修正路徑也不夠:內附的
pyaudioop.py是 Python 2 時代的程式碼(使用buffer()、.next()等),實際呼叫時仍會出錯。
4. 為何一直沒修?
- pydub 在 PyPI 的最後版本是 0.25.1(2021 年 3 月),之後未再發布。
- 相關修正 PR(例如 #816:為 3.13+ 加入
audioop-lts相依)尚未合併。 - 相關 issue:#839、#863、#867。
5. 解決方法
✅ 建議:安裝 audioop-lts
pip install audioop-lts
- 社群維護的
audioop回補套件(同樣是 C 實作)。 - 安裝後
import audioop可直接成功,pydub 不會走到pyaudioopfallback。 -
可在需求檔中只針對 3.13+ 安裝:
audioop-lts; python_version >= "3.13"
替代方案:fork 版 pydub
pip install fitzyracing-pydub
- 匯入名稱仍為
pydub,不需改程式碼。 - 修正了匯入路徑、在 3.13+ 自動相依
audioop-lts,並修好 Python 2 程式碼。 - ⚠️ 注意:
- 屬第三方維護,使用前請自行評估。
- 若其他相依套件要求
pydub,pip 仍會安裝原版。 - 若官方日後發布修正版,建議改回官方版本。
6. 速查
| 項目 | 說明 |
|---|---|
audioop |
標準庫 C 模組,3.13 移除 |
pyaudioop |
pydub 內附的純 Python 替代品 |
audioop-lts |
PyPI 上的 audioop 回補套件 |
| 錯誤原因 | 絕對匯入路徑錯誤 + 內附程式為 Python 2 寫法 |
| 最簡解法 | pip install audioop-lts |
Top comments (0)