331 lines
9.8 KiB
Markdown
331 lines
9.8 KiB
Markdown
|
|
# 错误问题汇总
|
|||
|
|
|
|||
|
|
## 1. `Could not find Opus library. Make sure it is installed.`
|
|||
|
|
|
|||
|
|
### **错误描述**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
(.venv) C:\Users\Junsen\Desktop\learning\xiaozhi-python>python xiaozhi-python.py
|
|||
|
|
Traceback (most recent call last):
|
|||
|
|
File "C:\Users\Junsen\Desktop\learning\xiaozhi-python\xiaozhi-python.py", line 5, in <module>
|
|||
|
|
import opuslib
|
|||
|
|
File "C:\Users\Junsen\Desktop\learning\xiaozhi-python\.venv\lib\site-packages\opuslib\__init__.py", line 19, in <module>
|
|||
|
|
from .exceptions import OpusError # NOQA
|
|||
|
|
File "C:\Users\Junsen\Desktop\learning\xiaozhi-python\.venv\lib\site-packages\opuslib\exceptions.py", line 10, in <module>
|
|||
|
|
import opuslib.api.info
|
|||
|
|
File "C:\Users\Junsen\Desktop\learning\xiaozhi-python\.venv\lib\site-packages\opuslib\api\__init__.py", line 20, in <module>
|
|||
|
|
raise Exception(
|
|||
|
|
Exception: Could not find Opus library. Make sure it is installed.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **解决方案**
|
|||
|
|
|
|||
|
|
1. **Windows**
|
|||
|
|
|
|||
|
|
- 下载并安装 Opus 库。
|
|||
|
|
- 确保 `opuslib` 相关库正确安装。
|
|||
|
|
|
|||
|
|
2. **Linux/macOS**
|
|||
|
|
|
|||
|
|
- 运行以下命令安装 `libopus`:
|
|||
|
|
```sh
|
|||
|
|
sudo apt-get install libopus-dev # Ubuntu/Debian
|
|||
|
|
brew install opus # macOS
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Python 代码安装**
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
pip install opuslib
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. `externally-managed-environment` (macOS)
|
|||
|
|
|
|||
|
|
### **错误描述**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
(.venv) huangjunsen@huangjunsendeMac-mini py-xiaozhi % pip install -r requirements_mac.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|||
|
|
|
|||
|
|
error: externally-managed-environment
|
|||
|
|
|
|||
|
|
× This environment is externally managed
|
|||
|
|
╰─> To install Python packages system-wide, try brew install
|
|||
|
|
xyz, where xyz is the package you are trying to
|
|||
|
|
install.
|
|||
|
|
|
|||
|
|
If you wish to install a Python library that isn't in Homebrew,
|
|||
|
|
use a virtual environment:
|
|||
|
|
|
|||
|
|
python3 -m venv path/to/venv
|
|||
|
|
source path/to/venv/bin/activate
|
|||
|
|
python3 -m pip install xyz
|
|||
|
|
|
|||
|
|
If you wish to install a Python application that isn't in Homebrew,
|
|||
|
|
it may be easiest to use 'pipx install xyz', which will manage a
|
|||
|
|
virtual environment for you. You can install pipx with
|
|||
|
|
|
|||
|
|
brew install pipx
|
|||
|
|
|
|||
|
|
You may restore the old behavior of pip by passing
|
|||
|
|
the '--break-system-packages' flag to pip, or by adding
|
|||
|
|
'break-system-packages = true' to your pip.conf file. The latter
|
|||
|
|
will permanently disable this error.
|
|||
|
|
|
|||
|
|
If you disable this error, we STRONGLY recommend that you additionally
|
|||
|
|
pass the '--user' flag to pip, or set 'user = true' in your pip.conf
|
|||
|
|
file. Failure to do this can result in a broken Homebrew installation.
|
|||
|
|
|
|||
|
|
Read more about this behavior here: <https://peps.python.org/pep-0668/>
|
|||
|
|
|
|||
|
|
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
|
|||
|
|
hint: See PEP 668 for the detailed specification.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **解决方案**
|
|||
|
|
|
|||
|
|
1. **使用虚拟环境安装**
|
|||
|
|
```sh
|
|||
|
|
python3 -m venv my_env
|
|||
|
|
source my_env/bin/activate
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
```
|
|||
|
|
2. **使用 **``** 进行全局安装**
|
|||
|
|
```sh
|
|||
|
|
brew install pipx
|
|||
|
|
pipx install package_name
|
|||
|
|
```
|
|||
|
|
3. **强制安装(不推荐)**
|
|||
|
|
```sh
|
|||
|
|
pip install package_name --break-system-packages
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. `WebSocket连接失败: BaseEventLoop.create_connection() got an unexpected keyword argument 'extra_headers'`
|
|||
|
|
|
|||
|
|
### **错误描述**
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 建立WebSocket连接
|
|||
|
|
self.websocket = await websockets.connect(
|
|||
|
|
self.WEBSOCKET_URL,
|
|||
|
|
extra_headers=headers # 高版本这里改为 additional_headers=headers
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **解决方案**
|
|||
|
|
|
|||
|
|
- **新版本 **``: `extra_headers` 改为 `additional_headers`。
|
|||
|
|
- **旧版本 **``: `additional_headers` 改为 `extra_headers`。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. `没有找到默认的输入/输出音频设备`
|
|||
|
|
|
|||
|
|
### **错误描述**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
AudioCodec - ERROR - 初始化音频设备失败: [Errno -9996] Invalid input device (no default output device)
|
|||
|
|
AudioCodec - WARNING - 无法初始化音频设备: [Errno -9996] Invalid input device (no default output device)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **解决方案**
|
|||
|
|
|
|||
|
|
1. **Windows**:
|
|||
|
|
|
|||
|
|
- 在 **声音设置** 中启用麦克风和扬声器。
|
|||
|
|
|
|||
|
|
2. **Linux/macOS**:
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
pactl list sources | grep "Name"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **检查可用音频设备**:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import pyaudio
|
|||
|
|
p = pyaudio.PyAudio()
|
|||
|
|
for i in range(p.get_device_count()):
|
|||
|
|
print(f"设备 {i}: {p.get_device_info_by_index(i)['name']}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **手动指定音频设备**:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, input_device_index=0)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
|
|||
|
|
## **5. `ModuleNotFoundError: No module named '_tkinter'` mac m4以下常见 **
|
|||
|
|
|
|||
|
|
### **错误描述**
|
|||
|
|
```
|
|||
|
|
(.venv) apple@appledeMac-mini py-xiaozhi % python main.py
|
|||
|
|
|
|||
|
|
Traceback (most recent call last):
|
|||
|
|
File "/Users/apple/Desktop/py-xiaozhi/main.py", line 5, in <module>
|
|||
|
|
from src.application import Application
|
|||
|
|
File "/Users/apple/Desktop/py-xiaozhi/src/application.py", line 23, in <module>
|
|||
|
|
from src.display import gui_display, cli_display
|
|||
|
|
File "/Users/apple/Desktop/py-xiaozhi/src/display/gui_display.py", line 2, in <module>
|
|||
|
|
import tkinter as tk
|
|||
|
|
File "/opt/homebrew/Cellar/python@3.12/3.12.9/Frameworks/Python.framework/Versions/3.12/lib/python3.12/tkinter/__init__.py", line 38, in <module>
|
|||
|
|
import _tkinter # If this fails your Python may not be configured for Tk
|
|||
|
|
^^^^^^^^^^^^^^^
|
|||
|
|
ModuleNotFoundError: No module named '_tkinter'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **解决方案**
|
|||
|
|
|
|||
|
|
1. **安装 `tcl-tk`**
|
|||
|
|
```sh
|
|||
|
|
brew upgrade tcl-tk # 一般第一步就可以了
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **检查 Homebrew 的 `tcl-tk` 路径**
|
|||
|
|
```sh
|
|||
|
|
brew info tcl-tk
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **重新安装 Python,并链接 `tcl-tk`**
|
|||
|
|
```sh
|
|||
|
|
brew install python-tk
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **手动指定 `Tcl/Tk` 路径(如有必要)**
|
|||
|
|
```sh
|
|||
|
|
export PATH="/opt/homebrew/opt/tcl-tk/bin:$PATH"
|
|||
|
|
export LDFLAGS="-L/opt/homebrew/opt/tcl-tk/lib"
|
|||
|
|
export CPPFLAGS="-I/opt/homebrew/opt/tcl-tk/include"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
5. **重新创建虚拟环境**
|
|||
|
|
```sh
|
|||
|
|
python3 -m venv .venv
|
|||
|
|
source .venv/bin/activate
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. `导入 opuslib 失败: No module named 'pyaudioop'或'_cffi_backend'`
|
|||
|
|
|
|||
|
|
### **错误描述**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
找到opus库文件: D:\xiaozhi\PC\py-xiaozhi-main\libs\windows\opus.dll
|
|||
|
|
已添加DLL搜索路径: D:\xiaozhi\PC\py-xiaozhi-main\libs\windows
|
|||
|
|
已成功加载 opus.dll: D:\xiaozhi\PC\py-xiaozhi-main\libs\windows\opus.dll
|
|||
|
|
导入 opuslib 失败: No module named 'pyaudioop'
|
|||
|
|
确保 opus 动态库已正确安装或位于正确的位置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
找到opus库文件: D:\xiaozhi\PC\py-xiaozhi-main\libs\windows\opus.dll
|
|||
|
|
已添加DLL搜索路径: D:\xiaozhi\PC\py-xiaozhi-main\libs\windows
|
|||
|
|
已成功加载 opus.dll: D:\xiaozhi\PC\py-xiaozhi-main\libs\windows\opus.dll
|
|||
|
|
导入 opuslib 失败: No module named '_cffi_backend'
|
|||
|
|
请确保 opus 动态库已正确安装或位于正确的位置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **解决方案**
|
|||
|
|
|
|||
|
|
1. **Python版本兼容性问题**
|
|||
|
|
- 这个错误通常与Python版本有关,尤其是Python 3.13版本
|
|||
|
|
- 建议使用Python 3.9-3.12版本
|
|||
|
|
|
|||
|
|
2. **重新安装cffi**
|
|||
|
|
```sh
|
|||
|
|
pip uninstall cffi
|
|||
|
|
pip install cffi
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **opus.dll放置**
|
|||
|
|
- 确保已将opus.dll放在正确位置(项目根目录和System32目录)
|
|||
|
|
```sh
|
|||
|
|
# 检查是否已复制到这些位置
|
|||
|
|
C:\Windows\System32\opus.dll
|
|||
|
|
项目根目录\opus.dll
|
|||
|
|
项目根目录\libs\windows\opus.dll
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **安装pyaudioop支持库**
|
|||
|
|
- 对于'pyaudioop'错误,尝试降级Python版本或安装相关依赖
|
|||
|
|
```sh
|
|||
|
|
pip install pyaudio
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 8. `error: subprocess-exited-with-error`(安装 `numpy` 失败)
|
|||
|
|
|
|||
|
|
### **错误描述**
|
|||
|
|
```
|
|||
|
|
Collecting numpy==2.0.2 (from -r requirements.txt (line 8))
|
|||
|
|
Using cached https://mirrors.aliyun.com/pypi/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz (18.9 MB)
|
|||
|
|
Installing build dependencies ... done
|
|||
|
|
Getting requirements to build wheel ... done
|
|||
|
|
Installing backend dependencies ... done
|
|||
|
|
Preparing metadata (pyproject.toml) ... error
|
|||
|
|
error: subprocess-exited-with-error
|
|||
|
|
|
|||
|
|
× Preparing metadata (pyproject.toml) did not run successfully.
|
|||
|
|
│ exit code: 1
|
|||
|
|
╰─> [21 lines of output]
|
|||
|
|
...
|
|||
|
|
WARNING: Failed to activate VS environment: Could not parse vswhere.exe output
|
|||
|
|
ERROR: Unknown compiler(s): [['icl'], ['cl'], ['cc'], ['gcc'], ['clang'], ['clang-cl'], ['pgcc']]
|
|||
|
|
The following exception(s) were encountered:
|
|||
|
|
Running `icl ""` gave "[WinError 2] 系统找不到指定的文件。"
|
|||
|
|
Running `cl /?` gave "[WinError 2] 系统找不到指定的文件。"
|
|||
|
|
Running `cc --version` gave "[WinError 2] 系统找不到指定的文件。"
|
|||
|
|
Running `gcc --version` gave "[WinError 2] 系统找不到指定的文件。"
|
|||
|
|
Running `clang --version` gave "[WinError 2] 系统找不到指定的文件。"
|
|||
|
|
Running `clang-cl /?` gave "[WinError 2] 系统找不到指定的文件。"
|
|||
|
|
Running `pgcc --version` gave "[WinError 2] 系统找不到指定的文件。"
|
|||
|
|
|
|||
|
|
note: This error originates from a subprocess, and is likely not a problem with pip.
|
|||
|
|
error: metadata-generation-failed
|
|||
|
|
|
|||
|
|
× Encountered error while generating package metadata.
|
|||
|
|
╰─> See above for output.
|
|||
|
|
|
|||
|
|
note: This is an issue with the package mentioned above, not pip.
|
|||
|
|
hint: See above for details.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **解决方案**
|
|||
|
|
- 建议python版本在 3.9 - 3.12
|
|||
|
|
|
|||
|
|
1. **确保 `numpy` 版本兼容**
|
|||
|
|
|
|||
|
|
`numpy==2.0.2` 可能存在构建问题,建议尝试安装较稳定的版本:
|
|||
|
|
```sh
|
|||
|
|
pip install numpy==1.24.3
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果你不需要特定版本,可以安装最新稳定版本:
|
|||
|
|
```sh
|
|||
|
|
pip install numpy
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **安装编译工具**
|
|||
|
|
|
|||
|
|
Windows用户可能需要安装Visual C++ Build Tools:
|
|||
|
|
```sh
|
|||
|
|
# 安装Microsoft C++ Build Tools
|
|||
|
|
# 下载并安装: https://visualstudio.microsoft.com/visual-cpp-build-tools/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **使用预编译的轮子**
|
|||
|
|
```sh
|
|||
|
|
pip install --only-binary=numpy numpy
|
|||
|
|
```
|