pyqt5-tool安装失败,PermissionError [WinError 32] 另一个程序正在使用此文件,进程无法访问 - 开源小栈 - 专注于高质量开源项目、AI论文复现与开发者工具分享

本文详细分析了在Windows系统中使用pip安装pyqt5-tools时遇到PermissionError [WinError 32]和[WinError 5]错误的根本原因。错误通常源于pyqt5-tools包本身已不维护,且其依赖的PyQt5版本冲突导致构建失败。文章提供了两种高效解决方案:一是推荐使用替代包qt5-applications来获取Qt Designer等工具,避免安装冲突;二是建议在Conda环境中直接安装pyqt,以获得更稳定的开发环境。两种方法均能有效解决安装失败问题,并恢复PyQt5图形界面开发的完整工作流。

问题描述

在安装pyqt5-tools遇到报错。直接明显的问题是 PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。 PermissionError: [WinError 5] 拒绝访问。

(simple) C:\Users\Administrator>pip install pyqt5 pyqt5-tools
Requirement already satisfied: pyqt5 in d:\program\miniconda3\envs\simple\lib\site-packages (5.15.11)
Collecting pyqt5-tools
  Using cached pyqt5_tools-5.15.9.3.3-py3-none-any.whl.metadata (8.3 kB)
Requirement already satisfied: PyQt5-sip<13,>=12.15 in d:\program\miniconda3\envs\simple\lib\site-packages (from pyqt5) (12.17.0)
Requirement already satisfied: PyQt5-Qt5<5.16.0,>=5.15.2 in d:\program\miniconda3\envs\simple\lib\site-packages (from pyqt5) (5.15.2)
Collecting click (from pyqt5-tools)
  Using cached click-8.3.1-py3-none-any.whl.metadata (2.6 kB)
Collecting pyqt5
  Using cached PyQt5-5.15.9-cp37-abi3-win_amd64.whl.metadata (2.2 kB)
INFO: pip is looking at multiple versions of pyqt5-tools to determine which version is compatible with other requirements. This could take a while.
Collecting pyqt5-tools
  Using cached pyqt5_tools-5.15.4.3.2-py3-none-any.whl.metadata (8.3 kB)
Collecting pyqt5
  Using cached PyQt5-5.15.4.tar.gz (3.3 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [62 lines of output]
      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
      Querying qmake about your Qt installation...
      Traceback (most recent call last):
        File "D:\Program\miniconda3\envs\simple\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 389, in <module>
          main()
        File "D:\Program\miniconda3\envs\simple\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 373, in main
          json_out["return_val"] = hook(**hook_input["kwargs"])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "D:\Program\miniconda3\envs\simple\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 178, in prepare_metadata_for_build_wheel
          whl_basename = backend.build_wheel(metadata_directory, config_settings)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\Administrator\AppData\Local\Temp\pip-build-env-t9i72db9\overlay\Lib\site-packages\sipbuild\api.py", line 28, in build_wheel
          project = AbstractProject.bootstrap('wheel',
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\Users\Administrator\AppData\Local\Temp\pip-build-env-t9i72db9\overlay\Lib\site-packages\sipbuild\abstract_project.py", line 74, in bootstrap
          project.setup(pyproject, tool, tool_description)
        File "C:\Users\Administrator\AppData\Local\Temp\pip-build-env-t9i72db9\overlay\Lib\site-packages\sipbuild\project.py", line 677, in setup
          self.update(tool)
        File "C:\Users\Administrator\AppData\Local\Temp\pip-install-gwp3rihn\pyqt5_e55e9e9f86c440c58d32e2ef9337785d\project.py", line 160, in update
          raise UserException(
      sipbuild.exceptions.UserException
      Traceback (most recent call last):
        File "D:\Program\miniconda3\envs\simple\Lib\shutil.py", line 637, in _rmtree_unsafe
          os.rmdir(path)
      PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'C:\\Users\\Administrator\\AppData\\Local\\Temp\\tmpjmjpaowm'

      During handling of the above exception, another exception occurred:

      Traceback (most recent call last):
        File "D:\Program\miniconda3\envs\simple\Lib\tempfile.py", line 909, in onexc
          _os.unlink(path)
      PermissionError: [WinError 5] 拒绝访问。: 'C:\\Users\\Administrator\\AppData\\Local\\Temp\\tmpjmjpaowm'

      During handling of the above exception, another exception occurred:

      Traceback (most recent call last):
        File "D:\Program\miniconda3\envs\simple\Lib\weakref.py", line 666, in _exitfunc
          f()
        File "D:\Program\miniconda3\envs\simple\Lib\weakref.py", line 590, in __call__
          return info.func(*info.args, **(info.kwargs or {}))
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "D:\Program\miniconda3\envs\simple\Lib\tempfile.py", line 939, in _cleanup
          cls._rmtree(name, ignore_errors=ignore_errors)
        File "D:\Program\miniconda3\envs\simple\Lib\tempfile.py", line 934, in _rmtree
          _shutil.rmtree(name, onexc=onexc)
        File "D:\Program\miniconda3\envs\simple\Lib\shutil.py", line 781, in rmtree
          return _rmtree_unsafe(path, onexc)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "D:\Program\miniconda3\envs\simple\Lib\shutil.py", line 639, in _rmtree_unsafe
          onexc(os.rmdir, path, err)
        File "D:\Program\miniconda3\envs\simple\Lib\tempfile.py", line 924, in onexc
          cls._rmtree(path, ignore_errors=ignore_errors,
        File "D:\Program\miniconda3\envs\simple\Lib\tempfile.py", line 934, in _rmtree
          _shutil.rmtree(name, onexc=onexc)
        File "D:\Program\miniconda3\envs\simple\Lib\shutil.py", line 781, in rmtree
          return _rmtree_unsafe(path, onexc)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "D:\Program\miniconda3\envs\simple\Lib\shutil.py", line 639, in _rmtree_unsafe
          onexc(os.rmdir, path, err)
        File "D:\Program\miniconda3\envs\simple\Lib\shutil.py", line 637, in _rmtree_unsafe
          os.rmdir(path)
      PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'C:\\Users\\Administrator\\AppData\\Local\\Temp\\tmpjmjpaowm'
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

原因分析

pyqt5-tools 依赖特定版本的 PyQt5,但 pip 正在尝试降级/重装 PyQt5,结果导致构建 PyQt5 源码失败(尤其在 Windows 上最容易出错)。

另外,pyqt5-tools 这个包本身已经 长期不维护,并且经常在新环境中无法成功安装。

解决方案

(1)方法1:安装 qt5-applications(最简单)

pyqt5-tools 的主要用途是带 QtDesigner、uic、rcc。不用 pyqt5-tools 也能获得完全相同的功能

pip install qt5-applications

安装后执行:

python -m qt5_applications.qtdesigner

这会打开 Qt Designer,和 pyqt5-tools 提供的版本一样。

(2)方法2:用 conda 安装

目前我在用 conda 环境(miniconda),用 conda 安装是最稳的:

conda install pyqt

然后就可以用:

# conda 下命令
pyuic5.exe your.ui -o your.py

pyuic5 your.ui -o your.py

pyrcc5 resources.qrc -o resources_rc.py
分类: 暂无分类 标签: qt5-applicationspyqt5-toolsPyQt5安装PyQt5环境配置

评论

暂无评论数据

暂无评论数据

目录