Mac M1环境下Pipenv安装PyQt5失败问题求助
在Mac M1的Pipenv环境中安装PyQt5失败的解决方法
问题背景
在Mac M1设备的Pipenv虚拟环境中尝试安装PyQt5及pyqt5-sip,先后使用两种依赖配置:
- 方案1:无版本限制的依赖声明
- 方案2:指定
pyqt5-sip==12.7.0和不存在的pyqt5==5.10.1
尝试pipenv install、pipenv install --skip-lock、pipenv install pyqt5三种命令均安装失败,具体错误如下:
依赖配置方案
方案1配置
[packages] pyqt5-sip = "*" pyqt5 = "*"
方案2配置
[packages] pyqt5-sip = "==12.7.0" pyqt5 = "==5.10.1" # 该版本不存在
各命令错误信息
pipenv install 错误
Pipfile.lock (7d18ff) 已过期,正在更新为 (bb5ccf)... 正在锁定[packages]依赖... 正在构建依赖需求... ✘ 锁定失败! ERROR:pip.subprocessor:[present-rich] 准备元数据(pyproject.toml)失败,退出码1 [ResolutionFailure]: 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/resolver.py", 行782, in _main [ResolutionFailure]: resolve_packages( [ResolutionFailure]: 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/resolver.py", 行730, in resolve_packages [ResolutionFailure]: results, resolver = resolve( [ResolutionFailure]: 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/resolver.py", 行709, in resolve [ResolutionFailure]: return resolve_deps( [ResolutionFailure]: 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/utils/resolver.py", 行1105, in resolve_deps [ResolutionFailure]: results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps( [ResolutionFailure]: 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/utils/resolver.py", 行894, in actually_resolve_deps [ResolutionFailure]: resolver.resolve() [ResolutionFailure]: 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/utils/resolver.py", 行689, in resolve [ResolutionFailure]: raise ResolutionFailure(message=str(e)) [pipenv.exceptions.ResolutionFailure]: 警告:无法解析依赖,可能存在子依赖版本不匹配。 可使用 $ pipenv install --skip-lock 绕过锁定机制,再运行 $ pipenv graph 检查依赖情况。 提示:如果是预发布依赖,尝试 $ pipenv lock --pre。 ERROR: 元数据生成失败
pipenv install --skip-lock 错误
正在从Pipfile安装依赖... 安装pyqt5-sip时出错!将重试。 安装pyqt5时出错!将重试。 正在安装初始失败的依赖... 部分依赖安装失败,以下依赖安装失败且已尝试重试: [Requirement(_name='pyqt5-sip', vcs=None, req=NamedRequirement(name='pyqt5-sip', version='', req=Requirement.parse('pyqt5-sip'), extras=[], editable=False, _parsed_line=<Line (editable=False, name=pyqt5-sip, path=None, uri=None, extras=(), markers=None, vcs=None, specifier=None, pyproject=None, pyproject_requires=None, pyproject_backend=None, ireq=pyqt5-sip)>), markers=None, _specifiers='', index=None, editable=False, hashes=frozenset(), extras=(), abstract_dep=None, _line_instance=<Line (editable=False, name=pyqt5-sip, path=None, uri=None, extras=(), markers=None, vcs=None, specifier=None, pyproject=None, pyproject_requires=None, pyproject_backend=None, ireq=pyqt5-sip)>, _ireq=None), Requirement(_name='pyqt5', vcs=None, req=NamedRequirement(name='pyqt5', version='', req=Requirement.parse('pyqt5'), extras=[], editable=False, _parsed_line=<Line (editable=False, name=pyqt5, path=None, uri=None, extras=(), markers=None, vcs=None, specifier=None, pyproject=None, pyproject_requires=None, pyproject_backend=None, ireq=pyqt5)>), markers=None, _specifiers='', index=None, editable=False, hashes=frozenset(), extras=(), abstract_dep=None, _line_instance=<Line (editable=False, name=pyqt5, path=None, uri=None, extras=(), markers=None, vcs=None, specifier=None, pyproject=None, pyproject_requires=None, pyproject_backend=None, ireq=pyqt5)>, _ireq=None)]
pipenv install pyqt5 错误
正在安装pyqt5... 错误:安装pyqt5时出错! 错误详情:收集pyqt5 使用缓存的PyQt5-5.15.7.tar.gz (3.2 MB) 正在安装构建依赖:开始 正在安装构建依赖:完成,状态为'done' 获取构建wheel的需求:开始 获取构建wheel的需求:完成,状态为'done' 准备元数据(pyproject.toml):开始 准备元数据(pyproject.toml):完成,状态为'error' error: subprocess-exited-with-error × 准备元数据(pyproject.toml)未成功运行。 │ 退出码:1 ╰─> [29行输出] 回溯(最近的调用最后): 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/pep517/in_process/_in_process.py", 行156, in prepare_metadata_for_build_wheel hook = backend.prepare_metadata_for_build_wheel AttributeError: 模块'sipbuild.api'没有属性'prepare_metadata_for_build_wheel' 在处理上述异常期间,发生了另一个异常: 回溯(最近的调用最后): 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/pep517/in_process/_in_process.py", 行363, in <module> main() 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/pep517/in_process/_in_process.py", 行345, in main json_out['return_val'] = hook(**hook_input['kwargs']) 文件 "/opt/homebrew/Cellar/pipenv/2022.9.21/libexec/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/pep517/in_process/_in_process.py", 行160, in prepare_metadata_for_build_wheel whl_basename = backend.build_wheel(metadata_directory, config_settings) 文件 "/private/var/folders/z8/lhf1yvnd1tb1bvq856nr_0240000gn/T/pip-build-env-t831aefc/overlay/lib/python3.9/site-packages/sipbuild/api.py", 行46, in build_wheel project = AbstractProject.bootstrap('wheel', 文件 "/private/var/folders/z8/lhf1yvnd1tb1bvq856nr_0240000gn/T/pip-build-env-t831aefc/overlay/lib/python3.9/site-packages/sipbuild/abstract_project.py", 行87, in bootstrap project.setup(pyproject, tool, tool_description) 文件 "/private/var/folders/z8/lhf1yvnd1tb1bvq856nr_0240000gn/T/pip-build-env-t831aefc/overlay/lib/python3.9/site-packages/sipbuild/project.py", 行585, in setup self.apply_user_defaults(tool) 文件 "project.py", 行69, in apply_user_defaults super().apply_user_defaults(tool) 文件 "/private/var/folders/z8/lhf1yvnd1tb1bvq856nr_0240000gn/T/pip-build-env-t831aefc/overlay/lib/python3.9/site-packages/pyqtbuild/project.py", 行70, in apply_user_defaults super().apply_user_defaults(tool) 文件 "/private/var/folders/z8/lhf1yvnd1tb1bvq856nr_0240000gn/T/pip-build-env-t831aefc/overlay/lib/python3.9/site-packages/sipbuild/project.py", 行236, in apply_user_defaults self.builder.apply_user_defaults(tool) 文件 "/private/var/folders/z8/lhf1yvnd1tb1bvq856nr_0240000gn/T/pip-build-env-t831aefc/overlay/lib/python3.9/site-packages/pyqtbuild/builder.py", 行69, in apply_user_defaults raise PyProjectOptionException('qmake', sipbuild.pyproject.PyProjectOptionException [输出结束] note: 该错误源自子进程,并非pip本身的问题。 error: metadata-generation-failed × 生成包元数据时遇到错误。 ╰─> 查看上述输出获取详情。 note: 这是上述包的问题,而非pip。 hint: 查看上述详情。 ✘ 安装失败
解决步骤
1. 安装Qt依赖(通过Homebrew)
Mac M1上安装PyQt5需要先安装Qt的工具链,直接用Homebrew安装:
brew install qt
2. 设置环境变量
安装完成后,需要让pip找到qmake的路径,运行以下命令(M1上Homebrew默认路径为/opt/homebrew):
export PATH="/opt/homebrew/opt/qt/bin:$PATH" export LDFLAGS="-L/opt/homebrew/opt/qt/lib" export CPPFLAGS="-I/opt/homebrew/opt/qt/include"
若需永久生效,可将上述三行添加到~/.zshrc或~/.bash_profile中,再执行source ~/.zshrc(对应你的shell配置文件)。
3. 调整Pipfile的依赖版本
使用支持M1的PyQt5版本(推荐5.15.4及以上,该版本开始提供arm64预编译wheel包),同时指定匹配的pyqt5-sip版本:
[packages] pyqt5 = ">=5.15.4" pyqt5-sip = ">=12.9.0"
4. 重新安装依赖
先删除旧虚拟环境(可选,避免残留问题):
pipenv --rm
再重新创建环境并安装依赖:
pipenv install
若仍遇锁定问题,可先跳过锁定再生成lock文件:
pipenv install --skip-lock pipenv lock --pre
关键原因说明
- M1为arm64架构,旧版本PyQt5无对应预编译wheel包,需本地编译,而编译依赖Qt的
qmake工具,未安装Qt会直接报错。 - 方案2中指定的
pyqt5==5.10.1不存在,且版本远早于支持M1的版本,必然安装失败。 sipbuild.api属性错误是编译环境缺失Qt工具链导致的连锁问题,安装Qt后即可解决。
内容的提问来源于stack exchange,提问作者The Dan
相关产品推荐
相关产品推荐

