我选择尝试使用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)
答案 0 :(得分:1)
找到外部模块的.pyd文件。将其复制并粘贴到构建文件中。所以,例如,如果它正在寻找_cpyHook(我遇到了与你相同的问题并且它说模块丢失了),请转到C:\ Python33 \ Lib \ site-packages \ pyHook并将文件复制并粘贴到C中:\ Python33 \构建\ exe.win-amd64-3.3
。答案 1 :(得分:0)
尝试在构建选项中明确列出缺少的包,如下所示:
buildOptions = dict(packages = ['pyHook', 'pywin32'], excludes = [])
如果您需要在构建中包含其他(非Python)文件,请查看this question的已接受答案。
编辑:我终于有时间再看一下,这似乎是一个棘手的问题。我会在时间允许的情况下继续戳它,但我想我会发布我的发现,以防它们对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=False
和include_in_shared_zip=False
,但这只会导致名为logger.zip
的文件而不是library.zip
。 (很奇怪。我无法相信这不是一个错误。)