首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python3.2: cx_freeze编译我的程序,但在调试模式下

Python3.2: cx_freeze编译我的程序,但在调试模式下
EN

Stack Overflow用户
提问于 2013-03-09 23:42:28
回答 1查看 1.5K关注 0票数 3

我正在用Python3.2和Pygame制作一个游戏。我已经成功地使用cx_freeze将所有东西打包到一个可执行文件中,并且它运行。很好。唯一的问题是,即使我把-OO setup.py**,的标志传递给,游戏也是在调试模式下编译的。**(我用print语句确认了__debug__确实是True)。

问题是,我的游戏有调试功能,是自动禁用在发布模式。我不想分发我的游戏的调试功能,我也不想把它们从代码中手动删除。

为了简洁起见,我的setup.py是这样缩短的:

代码语言:javascript
运行
复制
from cx_Freeze import setup, Executable

includes     = [<some modules>]
excludes     = [<some unwanted modules>]
include_files = [<game assets>]


build_options = {
                 'append_script_to_exe':True,
                 'bin_excludes':excludes,
                 'compressed':True,
                 'excludes': excludes,
                 'include_files': include_files,
                 'includes': includes,
                 'optimize':2,
                 'packages': ['core', 'game'],
                 }

common_exe_options = {
                      'appendScriptToExe'  : True,
                      'appendScriptToLibrary':True,
                      'compress'           : True,
                      'copyDependentFiles' : True,
                      'excludes'           : excludes,
                      'includes'           : includes, 
                      'script'             : '__init__.py',
                     }

executable = Executable(**common_exe_options)

setup(name='Invasodado',
      version='0.8',
      description='wowza!',
      options = {'build_exe': build_options,
                 'bdist_msi': build_options},
      executables=[executable])

与我的其余代码一样,完整的脚本可以在https://github.com/CorundumGames/Invasodado/blob/master/setup.py上找到。

在Ubuntu12.10上,我正在使用python3.2 -OO setup.py build构建。在Windows上,我正在使用C:\Python32\python -OO setup.py build进行构建。

任何帮助都是很棒的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-11 00:45:22

有两件稍微不同的事情:编译代码为字节码的优化和解释器运行的优化。在用于optimize的选项中设置cx_Freeze可以优化它生成的字节码,但是解释器仍然使用__debug__ == True运行。

似乎没有一种为嵌入式解释器设置调试标志的简单方法。它忽略PYTHONOPTIMIZE环境变量。作为解决办法,您可以使用以下调试标志:

代码语言:javascript
运行
复制
debug = __debug__ and not hasattr(sys, 'frozen')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15317231

复制
相关文章

相似问题

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