2

我选择尝试使用 cx_freeze,它将我的简单 python 3.x 键盘记录器转换为 exe。我选择 cx_freeze 因为 py2exe 只是 python 2.x 我正在使用这个 setup.py 脚本编译我的代码。

from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need
# fine tuning.
buildOptions = dict(packages = [], excludes = [])

base = 'Console'

executables = [
    Executable('logger.py', base=base, targetName = 'logger.exe')
]

setup(name='PyLogger',
      version = '0.1',
      description = 'A Simple Keylogger',
      options = dict(build_exe = buildOptions),
      executables = executables)

当我编译我的代码时

try:
    import pythoncom
except ImportError:
    input("Import Error, pywin32 is not installed")

try:
    import pyHook
except ImportError:
    input("Import Error, pyHook is not installed")

我收到导入错误,提示未安装 pywin32 和 pyHook。如何将外部模块导入 cx_freeze。

编辑 - 我尝试更改 setup.py 以添加包含选项,但没有任何区别。

from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need
# fine tuning.
buildOptions = dict(packages = ['pyHook','pythoncom'],includes = ['pyHook','pythoncom'], excludes = [])

base = 'Console'

executables = [
    Executable('logger.py', base=base, targetName = 'logger.exe')
]

setup(name='PyLogger',
      version = '0.1',
      description = 'A Simple Keylogger',
      options = dict(build_exe = buildOptions),
      executables = executables)
4

2 回答 2

1

找到外部模块的 .pyd 文件。将其复制并粘贴到构建文件中。因此,例如,如果它正在寻找 _cpyHook(我遇到了与您相同的问题,并且它说模块丢失了),请转到 C:\Python33\Lib\site-packages\pyHook 并将文件复制并粘贴到 C :\Python33\build\exe.win-amd64-3.3。

于 2014-06-17T21:58:33.820 回答
0

尝试在构建选项中明确列出缺少的包,如下所示:

buildOptions = dict(packages = ['pyHook', 'pywin32'], excludes = [])

如果您需要在构建中包含其他(非 Python)文件,请参阅此问题的公认答案。

编辑:我终于有时间再看一下,这似乎是一个棘手的问题。如果时间允许,我会继续研究它,但我想我会发布我的发现,以防它们对 OP 有用。我怀疑该pyHook模块在“冻结”时(即,当它包含在 zip 文件中时)不能很好地播放。如果我使用这个setup.py

from cx_Freeze import setup, Executable

buildOptions = dict(
    includes=['pythoncom'],
    packages=['pyHook']
)

executables = [
    Executable('logger.py', base='Console', targetName = 'logger.exe')
]

setup(
    name='PyLogger',
    version = '0.1',
    description = 'A Simple Keylogger',
    options = dict(build_exe = buildOptions),
    executables = executables
)

生成的logger.exe不会——至少最初——不能正确运行,并产生错误:

Import Error, pyHook is not installed

但是,如果我从包含 EXE 的目录中运行以下命令:

unzip library.zip

并重新运行logger.exe,然后一切似乎都正常。它只是无法pyHook从生成的library.zip文件中加载cx_Freeze。我过去曾见过这种问题,并通过sys.path在加载任何模块之前在我的顶级脚本中进行处理来解决它。我会看看我是否可以挖掘其中一个例子。与此同时,也许这个建议会对 OP 有所帮助:尝试解压缩 zip 文件,看看它是否有所作为。有几点需要注意:

  • 导入没有问题pywin32,只有pyHook
  • 确实尝试设置create_shared_zip=Falseinclude_in_shared_zip=False在构建选项中,但这只是导致一个名为logger.zip而不是library.zip. (奇怪。我不敢相信这不是一个错误。)
于 2014-02-27T19:28:51.177 回答