在使用 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
包的变化
- 转到"\Lib\site-packages\pynput\keyboard"。
- 打开">init.py"文件。
- 在文件的开头,添加以下导入:
from pynput.keyboard import _win32
- 找到行:
backend = backend(__name__)
并将其替换为行:backend = _win32
mouse
品包的变化
- 转到"\Lib\site-packages\pynput\mouse"。
- 打开">init.py"文件。
- 在文件的开头,添加以下导入:
from pynput.mouse import _win32
- 找到行:
backend = backend(__name__)
并将其替换为行:backend = _win32
在 macOS 和 Linux 上修复
在 macOS 或 Linux 上,请按照与上述相同的步骤操作,但根据您的平台,将"win32"替换为以下内容:
- 在 macOS 上,将"win32"替换为"darwin"。
- 在 Linux 上,将"win32"替换为"xorg"。