核心

在部署PI-Assistant(https://github.com/Lucky-183/PI-Assistant)项目中,首先要进行环境安装,官网文档中提供的安装命令如下:

pip install requests arcade RPi.GPIO pydub numpy wave sounddevice pymysql cn2an duckduckgo_search flask SpeechRecognition openai pyaudio websocket-client paho-mqtt

如果按照此命令安装,多半会出现问题。不是安装命令有问题,而是安装环境、设备、网络等等综合原因,导致一次性安装上面那么多的组件是有些困难的。

  • 解决:

1、分开一个个安装。
2、当安装出现超时,采用国内镜像安装,比如:pip install -i https://mirrors.aliyun.com/pypi/simple/ SpeechRecognition
3、安装中出现hash验证出问题,建议手动下载安装包进行安装。在https://pypi.org/网站上搜索并下载最新版本安装包。安装命令在文章下面有提到。
4、在执行python server.py过程中,还有一些需要安装的module,缺什么再单独安装什么。

(进过我的验证,按照上述方法,成功安装所有依赖并启动成功!如有疑问可以留言。)

BUG描述:

我的问题是要在树莓派上执行如下命令:

 pip install requests arcade RPi.GPIO pydub numpy wave sounddevice pymysql cn2an duckduckgo_search flask SpeechRecognition openai pyaudio websocket-client

执行过程中出现如下错误:

ERROR: Exception:Traceback (most recent call last):File "/usr/share/python-wheels/resolvelib-0.5.4-py2.py3-none-any.whl/resolvelib/resolvers.py", line 171, in _merge_into_criterioncrit = self.state.criteria[name]KeyError: 'speechrecognition'During handling of the above exception, another exception occurred:Traceback (most recent call last):File "/usr/share/python-wheels/urllib3-1.26.5-py2.py3-none-any.whl/urllib3/response.py", line 438, in _error_catcheryieldFile "/usr/share/python-wheels/urllib3-1.26.5-py2.py3-none-any.whl/urllib3/response.py", line 519, in readdata = self._fp.read(amt) if not fp_closed else b""File "/usr/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl/cachecontrol/filewrapper.py", line 62, in readdata = self.__fp.read(amt)File "/usr/lib/python3.9/http/client.py", line 458, in readn = self.readinto(b)File "/usr/lib/python3.9/http/client.py", line 502, in readinton = self.fp.readinto(b)File "/usr/lib/python3.9/socket.py", line 704, in readintoreturn self._sock.recv_into(b)File "/usr/lib/python3.9/ssl.py", line 1241, in recv_intoreturn self.read(nbytes, buffer)File "/usr/lib/python3.9/ssl.py", line 1099, in readreturn self._sslobj.read(len, buffer)socket.timeout: The read operation timed outDuring handling of the above exception, another exception occurred:Traceback (most recent call last):File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 223, in _mainstatus = self.run(options, args)File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 180, in wrapperreturn func(self, options, args)File "/usr/lib/python3/dist-packages/pip/_internal/commands/install.py", line 346, in runrequirement_set = resolver.resolve(File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/resolver.py", line 122, in resolveself._result = resolver.resolve(File "/usr/share/python-wheels/resolvelib-0.5.4-py2.py3-none-any.whl/resolvelib/resolvers.py", line 453, in resolvestate = resolution.resolve(requirements, max_rounds=max_rounds)File "/usr/share/python-wheels/resolvelib-0.5.4-py2.py3-none-any.whl/resolvelib/resolvers.py", line 318, in resolvename, crit = self._merge_into_criterion(r, parent=None)File "/usr/share/python-wheels/resolvelib-0.5.4-py2.py3-none-any.whl/resolvelib/resolvers.py", line 173, in _merge_into_criterioncrit = Criterion.from_requirement(self._p, requirement, parent)File "/usr/share/python-wheels/resolvelib-0.5.4-py2.py3-none-any.whl/resolvelib/resolvers.py", line 82, in from_requirementif not cands:File "/usr/share/python-wheels/resolvelib-0.5.4-py2.py3-none-any.whl/resolvelib/structs.py", line 124, in __bool__return bool(self._sequence)File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 99, in __bool__return any(self)File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/factory.py", line 239, in iter_index_candidatescandidate = self._make_candidate_from_link(File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/factory.py", line 167, in _make_candidate_from_linkself._link_candidate_cache[link] = LinkCandidate(File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", line 296, in __init__super(LinkCandidate, self).__init__(File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", line 144, in __init__self.dist = self._prepare()File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", line 222, in _preparedist = self._prepare_distribution()File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", line 307, in _prepare_distributionreturn self._factory.preparer.prepare_linked_requirement(File "/usr/lib/python3/dist-packages/pip/_internal/operations/prepare.py", line 480, in prepare_linked_requirementreturn self._prepare_linked_requirement(req, parallel_builds)File "/usr/lib/python3/dist-packages/pip/_internal/operations/prepare.py", line 503, in _prepare_linked_requirementlocal_file = unpack_url(File "/usr/lib/python3/dist-packages/pip/_internal/operations/prepare.py", line 253, in unpack_urlfile = get_http_url(File "/usr/lib/python3/dist-packages/pip/_internal/operations/prepare.py", line 130, in get_http_urlfrom_path, content_type = download(link, temp_dir.path)File "/usr/lib/python3/dist-packages/pip/_internal/network/download.py", line 163, in __call__for chunk in chunks:File "/usr/lib/python3/dist-packages/pip/_internal/cli/progress_bars.py", line 168, in iterfor x in it:File "/usr/lib/python3/dist-packages/pip/_internal/network/utils.py", line 64, in response_chunksfor chunk in response.raw.stream(File "/usr/share/python-wheels/urllib3-1.26.5-py2.py3-none-any.whl/urllib3/response.py", line 576, in streamdata = self.read(amt=amt, decode_content=decode_content)File "/usr/share/python-wheels/urllib3-1.26.5-py2.py3-none-any.whl/urllib3/response.py", line 541, in readraise IncompleteRead(self._fp_bytes_read, self.length_remaining)File "/usr/lib/python3.9/contextlib.py", line 135, in __exit__self.gen.throw(type, value, traceback)File "/usr/share/python-wheels/urllib3-1.26.5-py2.py3-none-any.whl/urllib3/response.py", line 443, in _error_catcherraise ReadTimeoutError(self._pool, None, "Read timed out.")urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='www.piwheels.org', port=443): Read timed out.

解决

1、升级pip的版本

这个错误是因为pip低版本中存在一点BUG,升级到最新版本就可以。

  • 升级命令(多半不行,会出现同样的错误,弃用此方法):
sudo python3 -m pip install --upgrade pip setuptools wheel
  • 安装包升级:在pip官网下载最新的安装包(此包时2024年2月2日最新版,如果时间太久了,可以自行在官网下载):
    https://files.pythonhosted.org/packages/b7/06/6b1ad0ae8f97d7a0d6f6ad640db10780578999e647a9593512ceb6f06469/pip-23.3.2.tar.gz

将上述安装包上传到树莓派中(我是在树莓派中出现的此问题),解压之后进入文件夹执行下面命令:

sudo python setup.py install
  • 安装包升级:官网自行下载。
    官网地址: https://pypi.org/ 在首页搜索框中输入pip即可。如下图所示:

    之后回车进入下面界面:

    如上图,选择最新版本进入即可,就会有下载的按钮,如下图:

新问题1:ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE

ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.SpeechRecognition from https://www.piwheels.org/simple/speechrecognition/SpeechRecognition-3.10.1-py2.py3-none-any.whl#sha256=2e1e47088e06ecf0b45e5ca0f0e21770d2d9bead1a848d93751bc724fc868ce4:Expected sha256 2e1e47088e06ecf0b45e5ca0f0e21770d2d9bead1a848d93751bc724fc868ce4 Gote2dfc76386f2da3de7537c7cfb9ce635aaf218aad5060a05c66f2351440f6cd8 

上述问题提示,遇到的错误信息表明安装的软件包哈希值与你的要求文件中指定的哈希值不匹配。这种不一致可能是由于在没有更新要求文件中相应哈希值的情况下更新了软件包版本引起的。
解决:
1、执行命令

pip freeze > requirements.txt

2、执行命令

sudo pip uninstall -r requirements.txt -y

3、执行命令

sudo pip install -r requirements.txt

新问题2:ERROR: Could not find a version that satisfies the requirement numpy==1.19.5 (from versions: none)

ERROR: No matching distribution found for numpy==1.19.5
解决:
安装numpy命令如下(使用清华镜像安装):

pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple