如何解决与 pyInstaller 和 pynput 的不兼容问题

How to fix the uncompatibility with pyInstaller and pynput

我正在使用 pyInstaller 创建应用程序,但出现致命错误。我正在使用这个包

从 pynput.keyboard 导入控制器

有人知道如何解决 pyInstaller 和 pynput 不兼容的问题吗? 也许我可以使用一些 pyInstaller 钩子?以及如何安装?

重要事实:

这是警告文件:

missing module named _posixsubprocess - imported by subprocess (optional), multiprocessing.util (delayed)
<br>
missing module named pwd - imported by posixpath (delayed, conditional), shutil (optional), tarfile (optional), pathlib (delayed, conditional, optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed), distutils.util (delayed, conditional, optional)
<br>
missing module named posix - imported by os (conditional, optional), shutil (conditional)
<br>
missing module named resource - imported by posix (top-level), test.support (optional)
<br>
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional)
<br>
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
<br>
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
<br>
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
<br>
missing module named grp - imported by shutil (optional), tarfile (optional), pathlib (delayed)
<br>
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
<br>
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
<br>
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
<br>
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
<br>
missing module named _scproxy - imported by urllib.request (conditional)
<br>
missing module named termios - imported by tty (top-level), getpass (optional)
<br>
missing module named 'java.lang' - imported by platform (delayed, optional), xml.sax._exceptions (conditional)
<br>
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
<br>
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
<br>
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
<br>
missing module named vms_lib - imported by platform (delayed, conditional, optional)
<br>
missing module named java - imported by platform (delayed)
<br>
missing module named _winreg - imported by platform (delayed, optional)
<br>
missing module named console - imported by pyreadline.console.ansi (conditional)
<br>
missing module named startup - imported by pyreadline.keysyms.common (conditional), pyreadline.keysyms.keysyms (conditional)
<br>
missing module named sets - imported by pyreadline.keysyms.common (optional)
<br>
missing module named System - imported by pyreadline.clipboard.ironpython_clipboard (top-level), pyreadline.keysyms.ironpython_keysyms (top-level), pyreadline.console.ironpython_console (top-level), pyreadline.rlmain (conditional)
<br>
missing module named StringIO - imported by pyreadline.py3k_compat (conditional), six (conditional)
<br>
missing module named IronPythonConsole - imported by pyreadline.console.ironpython_console (top-level)
<br>
missing module named clr - imported by pyreadline.clipboard.ironpython_clipboard (top-level), pyreadline.console.ironpython_console (top-level)
<br>
missing module named org - imported by pickle (optional)
<br>
runtime module named six.moves - imported by pynput._util (top-level)
<br>

我已经阅读了很多关于隐藏导入的内容并且我尝试了代码

pyinstaller --hidden-import=pynput.keyboard._win32 --hidden-import=pynput.mouse._win32 script.py

居然让.exe正常运行了。对于其他类似的问题,我建议检查 here and here。此命令已经过测试,可以在 Windows 中使用。微小的变化也使它对 Linux 有用。

我失败的地方是我省略了选项“鼠标”,因为我没有使用它。 这些隐藏的导入是必要的