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

相关推荐
我材不敲代码3 小时前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
0思必得05 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
韩立学长5 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
qq_192779875 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
u0109272715 小时前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊5 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
Imm7776 小时前
中国知名的车膜品牌推荐几家
人工智能·python
tudficdew6 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
sjjhd6527 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
2301_821369617 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python