Windows系统无法直接用uv安装pyqt5,但可以用uv pip安装

诸神缄默不语-个人技术博文与视频目录

1. 问题

问题: 执行uv add pyqt5时安装失败:

vbnet 复制代码
Resolved 144 packages in 6.34s
error: Distribution `pyqt5-qt5==5.15.18 @ registry+https://pypi.org/simple` can't be installed because it doesn't have a source distribution or wheel for the current platform

hint: You're on Windows (`win_amd64`), but `pyqt5-qt5` (v5.15.18) only has wheels for the following platforms: `manylinux2014_x86_64`, `macosx_10_13_x86_64`, `macosx_11_0_arm64`; consider adding your platform to `tool.uv.required-environments` to ensure uv resolves to a version with compatible wheels

如果在pyproject.toml中直接写入pyqt5的话,执行uv sync时会这么报错:

arduino 复制代码
Resolved 145 packages in 1.78s
  × Failed to build `pyqt5==5.15.2`
  ├─▶ The build backend returned an error                                           
  ╰─▶ Call to `sipbuild.api.build_wheel` failed (exit code: 1)

      [stderr]
      pyproject.toml: line 7: using '[tool.sip.metadata]' to specify the project    
      metadata is deprecated and will be removed in SIP v7.0.0, use '[project]'     
      instead
      Traceback (most recent call last):
        File "<string>", line 11, in <module>
          wheel_filename =
      backend.build_wheel("D:\\all_applications\\foruv\\foruvcache\\builds-v0\\.tmpdm8CqW",
      {}, None)
        File
      "D:\all_applications\foruv\foruvcache\builds-v0\.tmpywcL19\Lib\site-packages\sipbuild\api.py",
      line 28, in build_wheel
          project = AbstractProject.bootstrap('wheel',
                  arguments=_convert_config_settings(config_settings))
        File
      "D:\all_applications\foruv\foruvcache\builds-v0\.tmpywcL19\Lib\site-packages\sipbuild\abstract_project.py",
      line 74, in bootstrap
          project.setup(pyproject, tool, tool_description)
          ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File
      "D:\all_applications\foruv\foruvcache\builds-v0\.tmpywcL19\Lib\site-packages\sipbuild\project.py",
      line 661, in setup
          self.apply_user_defaults(tool)
          ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
        File
      "D:\all_applications\foruv\foruvcache\sdists-v9\pypi\pyqt5\5.15.2\DCnXDNUwgyaPDx3Z6cidl\src\project.py",
      line 63, in apply_user_defaults
          super().apply_user_defaults(tool)
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
        File
      "D:\all_applications\foruv\foruvcache\builds-v0\.tmpywcL19\Lib\site-packages\pyqtbuild\project.py",
      line 51, in apply_user_defaults
          super().apply_user_defaults(tool)
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
        File
      "D:\all_applications\foruv\foruvcache\builds-v0\.tmpywcL19\Lib\site-packages\sipbuild\project.py",
      line 248, in apply_user_defaults
          self.builder.apply_user_defaults(tool)
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
        File
      "D:\all_applications\foruv\foruvcache\builds-v0\.tmpywcL19\Lib\site-packages\pyqtbuild\builder.py",
      line 49, in apply_user_defaults
          raise PyProjectOptionException('qmake',
                  "specify a working qmake or add it to PATH")
      sipbuild.pyproject.PyProjectOptionException

      hint: This usually indicates a problem with the package or the build
      environment.
  help: `pyqt5` (v5.15.2) was included because `paid-column1` (v0.1.0) depends      
        on `pyqt5`

2. 原因

原因出在pyqt5官方,他家就限制了最新版pyqt5依赖的pyqt5-qt5包不能在Windows平台上装。

3. 解决方案

我最终成功的解决方案是先uv syncuv pip install pyqt5。注意如果反过来会把环境改回pyproject.toml的环境,但我觉得uv速度这么快你每次都来一遍也没有关系:

ini 复制代码
Using Python 3.13.7 environment at: D:\Codes\uv_environment\example\.venv
Resolved 3 packages in 12.74s
Prepared 2 packages in 49.63s
Installed 3 packages in 296ms
 + pyqt5==5.15.11                                                                   
 + pyqt5-qt5==5.15.2
 + pyqt5-sip==12.17.2

其他提到的可能有用的解决方案:

  1. uv add pyqt5==5.15.11 pyqt5-qt5==5.15.2^1^

  2. 在pyproject.toml中增加(跟上面一条其实是一样的,只是写法不同)^2^:

    ini 复制代码
    [dependency-groups]
    dev = [
        "pyqt5==5.15.11",
        "pyqt5-qt5==5.15.2",
    ]

    或^3^

    ini 复制代码
    deps = [
        "pyqt5>=5.15.11; sys_platform != 'win32'",
        "pyqt5<=5.15.2; sys_platform == 'win32'"
    ]
  3. 在pyproject.toml中增加^3^:

    ini 复制代码
    [tool.uv]
    constraint-dependencies = ["pyqt5-qt5 <=5.15.2"]
  4. 用PyQt6(草)^4^

Footnotes

  1. Bug Report: uv sync Fails to Install PyQt5 on Windows · Issue #11865 · astral-sh/uv

  2. uv sync fails on PyQt5 but pip install is OK · Issue #15421 · astral-sh/uv

  3. uv add pyqt5 error · Issue #7005 · astral-sh/uv 2

  4. Add pyqt5-qt5 pin for uv add compatibility on Windows by TimMonko · Pull Request #7744 · napari/napari

相关推荐
啊阿狸不会拉杆11 小时前
《机器学习导论》第 10 章-线性判别式
人工智能·python·算法·机器学习·numpy·lda·线性判别式
超龄超能程序猿11 小时前
Python 反射入门实践
开发语言·python
玄同76511 小时前
Python Random 模块深度解析:从基础 API 到 AI / 大模型工程化实践
人工智能·笔记·python·学习·算法·语言模型·llm
AIFarmer11 小时前
在EV3上运行Python语言——环境设置
python·ev3
yunsr11 小时前
python作业3
开发语言·python
历程里程碑11 小时前
普通数组-----除了自身以外数组的乘积
大数据·javascript·python·算法·elasticsearch·搜索引擎·flask
曦月逸霜11 小时前
Python快速入门——学习笔记(持续更新中~)
笔记·python·学习
喵手12 小时前
Python爬虫实战:采集菜谱网站的“分类/列表页”(例如“家常菜”或“烘焙”频道)数据,构建高可用的美食菜谱数据采集流水线(附CSV导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集菜谱网站数据·家常菜或烘焙频道·构建高可用食谱数据采集系统
喵手12 小时前
Python爬虫实战:硬核解析 Google Chrome 官方更新日志(正则+文本清洗篇)(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·csv导出·监控谷歌版本发布历史·获取稳定版更新日志
小邓睡不饱耶12 小时前
实战|W餐饮平台智能化菜品推荐方案(含Spark实操+算法选型+完整流程)
python·ai·ai编程·ai写作