为什么我的 pyinstaller 可执行文件不起作用?

时间:2021-05-27 18:20:46

标签: python pip pycharm pyinstaller

我在 PyCharm 中编写代码并进入 C:\Users\MyUser\PyCharmProjects\MyFile,然后从那里进入该目录中的 cmd,执行 pyinstaller --onefile -w main.py。这很完美。我从 dist 中获取了我的 main.exe 并将其放入 MyFile 并执行它,但在这样做时它带来了以下错误:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    from pynput.mouse import Controller, Button
  File "PyInstaller\loader\pyimod03_importers.py", line 540, in exec_module
  File "pynput\__init__.py", line 40, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 540, in exec_module
  File "pynput\keyboard\__init__.py, line 31, in <module>
  File "pynput\_util\__init__.py", line 76, in backend
ImportError
[4752] Failed to execute script main

我的代码的目的是快速移动鼠标,直到按住 a、b 和 c。只是一个有趣的恶作剧。这是它的副本:

import keyboard
from pynput.mouse import Controller, Button
import random
import tkinter as tk
root = tk.Tk()
mouse = Controller()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
while True:
    xVar = random.randint(0, screen_width)
    yVar = random.randint(0, screen_height)
    mouse.position = (xVar, yVar)
    if keyboard.is_pressed("a") and keyboard.is_pressed("b") and keyboard.is_pressed("c"):
        break

老实说,我已经尝试了一切。我无法弄清楚它出了什么问题。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

您必须添加 --hidden-import="pynput.keyboard._win32" --hidden-import "pynput.mouse._win32",以便 pyinstaller 可以包含 pynput 使用的后端。所以像:

pyinstaller --hidden-import="pynput.keyboard._win32" --hidden-import="pynput.mouse._win32" app.py

您也可以将其添加到您的规范文件中。

hiddenimports=["pynput.keyboard._win32", "pynput.mouse._win32"]

如果您使用的是 macOS,则将 '_win32' 替换为 '_darwin',如果使用的是 linux,则替换为 '_xorg'。

另一种方法是回退到不推荐的以前的版本,但以防万一。首先pip uninstall pynput然后:

pip install pynput==1.6.8