首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cx_freeze不导入外部模块

cx_freeze不导入外部模块
EN

Stack Overflow用户
提问于 2014-02-28 00:40:56
回答 2查看 5.9K关注 0票数 2

我选择尝试使用cx_freeze,它可以将我简单的Python3.x键盘记录器转换为可执行文件。我选择cx_freeze是因为py2exe只是Python2.x,我正在使用这个setup.py脚本编译我的代码。

代码语言:javascript
复制
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)

当我编译我的代码时,

代码语言:javascript
复制
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以添加includes选项,但没有什么不同。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2014-06-18 05:58:34

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-28 03:28:51

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

代码语言:javascript
复制
buildOptions = dict(packages = ['pyHook', 'pywin32'], excludes = [])

如果您需要在构建中包含其他(非this question )文件,请参阅接受的Python答案。

编辑:我终于有时间多看一眼了,这似乎是一个棘手的问题。我会在时间允许的情况下继续研究它,但我想我应该把我的发现发布出来,以防它们对行动有用。我怀疑pyHook模块在‘冻结’时,也就是当它被包含在压缩文件中时,运行得不是很好。如果我使用这个setup.py

代码语言:javascript
复制
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不能正确运行,并生成以下错误:

代码语言:javascript
复制
Import Error, pyHook is not installed

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

代码语言:javascript
复制
unzip library.zip

然后重新运行logger.exe,然后一切似乎都很正常。它只是不能从cx_Freeze生成的library.zip文件中加载pyHook。我以前见过这种问题,在加载任何模块之前,我在我的顶级脚本中使用sys.path来解决这个问题。我看看能不能找出一个这样的例子。同时,这个建议可能会对OP有所帮助:尝试解压缩zip文件,看看是否有什么不同。需要注意的几件事:

我导入pywin32没有任何问题,只有pyHook

  • I尝试过在构建选项中设置create_shared_zip=Falseinclude_in_shared_zip=False,但这只是导致了一个名为logger.zip而不是library.zip的文件。(奇怪。真不敢相信这不是个bug。)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22074774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档