Windows 上的 Python:无法使用 pynput 运行冻结的应用程序 - 不支持平台



在使用 cx_Freeze 64 的 Windows 11 的 6.10 位版本上,我正在尝试将一个 Python 应用程序冻结到 EXE 文件中,该应用程序在使用python AccessibleWindowSwitcher.py命令运行时运行没有问题。但是,当我尝试运行由cx_Freeze生成的 AccessWindowSwitcher.exe 文件时,我收到以下错误:

Traceback (most recent call last):
File "C:UsersasamecAppDataLocalProgramsPythonPython310-32Libsite-packagescx_Freezeinitscripts__startup__.py", line 113, in run
module_init.run(name + "__main__")
File "C:UsersasamecAppDataLocalProgramsPythonPython310-32Libsite-packagescx_FreezeinitscriptsConsole.py", line 15, in run
exec(code, module_main.__dict__)
File "AccessibleWindowSwitcher.py", line 6, in <module>
File "C:UsersasamecAppDataLocalProgramsPythonPython310-32libsite-packagespynput__init__.py", line 40, in <module>
from . import keyboard
File "C:UsersasamecAppDataLocalProgramsPythonPython310-32libsite-packagespynputkeyboard__init__.py", line 31, in <module>
backend = backend(__name__)
File "C:UsersasamecAppDataLocalProgramsPythonPython310-32libsite-packagespynput_util__init__.py", line 76, in backend
raise ImportError('this platform is not supported: {}'.format(
ImportError

我用于通过python AccessibleWindowSwitcher.py运行和冻结的python版本是Python 3.10.5 32位。

问题显然出在 pynput 库中,但我不知道仅在运行 EXE 文件时会导致错误的原因。

所以我找到了这个问题的临时解决方案。问题确实出在 pynput 库中,由于某种原因,该库无法导入一些依赖于平台的模块。该修复需要修改已安装的 pynput 库,因此将来更新 pynput 库,例如使用pip install --upgrade pynput,将再次出现此问题。

在视窗上修复

品普特keyboard包的变化

  1. 转到"\Lib\site-packages\pynput\keyboard"。
  2. 打开">init.py"文件。
  3. 在文件的开头,添加以下导入:from pynput.keyboard import _win32
  4. 找到行:backend = backend(__name__)并将其替换为行:backend = _win32

mouse品包的变化

  1. 转到"\Lib\site-packages\pynput\mouse"。
  2. 打开">init.py"文件。
  3. 在文件的开头,添加以下导入:from pynput.mouse import _win32
  4. 找到行:backend = backend(__name__)并将其替换为行:backend = _win32

在 macOS 和 Linux 上修复

在 macOS 或 Linux 上,请按照与上述相同的步骤操作,但根据您的平台,将"win32"替换为以下内容:

  • 在 macOS 上,将"win32"替换为"darwin"。
  • 在 Linux 上,将"win32"替换为"xorg"。

最新更新