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

相关推荐
中年程序员一枚2 小时前
同时装有Python3.12和Python3.14,历史原因Python3.12出现问题,需要删除,但是删除不干净
python
爱笑的眼睛112 小时前
超越翻转与裁剪:面向生产级AI的数据增强深度实践与多模态演进
java·人工智能·python·ai
一位代码2 小时前
python3 | XPath 安装及导入方法
python
张彦峰ZYF2 小时前
Python 模式匹配与高效正则表达式:从语言特性到工程级简单实践
python·正则表达式
zhishidi2 小时前
Spring @Scheduled注解调度机制详解
java·python·spring
qq_356196953 小时前
Day 43图像数据与显存机制@浙大疏锦行
python
yaoh.wang3 小时前
力扣(LeetCode) 94: 二叉树的中序遍历 - 解法思路
python·算法·leetcode·面试·职场和发展·二叉树·跳槽
摸鱼仙人~3 小时前
Flask-SocketIO 连接超时问题排查与解决(WSL / 虚拟机场景)
后端·python·flask
haiyu_y3 小时前
Day 45 预训练模型
人工智能·python·深度学习