将.py转换为.exe时出错

1 投票
1 回答
1356 浏览
提问于 2025-04-15 19:45

当我尝试把我的脚本变成一个可执行文件时,完成后我收到了这个错误:

Traceback (most recent call last):
  File "shd-WinResize.py", line 4, in <module>
  File "zipextimporter.pyo", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading win32api.pyd

我用这个脚本来进行转换:

from distutils.core import setup
import py2exe
import sys

sys.argv.append('py2exe')

setup(
    options = {'py2exe': dict(bundle_files=1, optimize=2)},
    windows = ["shd-WinResize.py"],
    zipfile = None,
    )

这是我程序的源代码:

import pyHook
import pythoncom

import win32api
import win32console
import win32gui

hideConsole = win32console.GetConsoleWindow()
win32gui.ShowWindow(hideConsole, 0)


def OnKeyboardEvent(event):
    if event.Ascii == 49:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 1440, 900, True)
    elif event.Ascii == 50:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 1366, 768, True)
    elif event.Ascii == 51:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 1280, 1024, True)
    elif event.Ascii == 52:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 1280, 960, True)
    elif event.Ascii == 53:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 1280, 800, True)
    elif event.Ascii == 54:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 1280, 768, True)
    elif event.Ascii == 55:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 1152, 864, True)
    elif event.Ascii == 56:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 1024, 768, True)
    elif event.Ascii == 57:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 800, 600, True)
    elif event.Ascii == 48:
        windowFocused = win32gui.GetForegroundWindow()
        win32gui.MoveWindow(windowFocused, 0, 0, 640, 480, True)


hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()

这到底哪里出问题了呢?

我想要压缩并打包...我该怎么办?

1 个回答

0

在Windows Vista和Windows 7上,PY2EXE似乎对它需要导入的一些DLL文件感到困惑。这里有一个解决办法,这个办法的灵感来自于另一篇帖子

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
    options={
        "py2exe":{
            "dll_excludes":[ "mswsock.dll", "powrprof.dll"],
            'bundle_files': 1
        }
    },
    windows = [{'script': "scriptName.py"}],
    zipfile = None,
)

撰写回答