2013-03-09 78 views
2

我正在用Python 3.2和Pygame進行遊戲。我已成功設法使用cx_freeze將所有內容捆綁到可執行文件中,並運行。精細。唯一的問題是,即使當我將-OO標誌傳遞給我的setup.py時,也會以調試模式編譯我的遊戲。(我已經print聲明證實,它是__debug__確實True。)Python 3.2:cx_freeze編譯我的程序,但在調試模式下

的問題是,我的遊戲已經調試是在釋放模式自動禁用功能。我不想分發我的遊戲的調試功能,我不希望手動將它們從代碼中移除。

setup.py,這裏縮短簡潔,如下:

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找到。

在Ubuntu 12.10上,我使用python3.2 -OO setup.py build構建。在Windows XP上,我正在用C:\Python32\python -OO setup.py build構建。

任何幫助將會很棒!

+0

這是對OpenGL代碼一個巨大的問題:東西像pyglet和pyopengl,如果我沒有記錯,在運行時,如果執行了一堆昂貴的安全檢查不運行優化,將代碼降低一個數量級。 – 2015-08-20 21:35:08

回答

1

有兩個稍微分開的東西:將代碼編譯爲字節碼的優化以及解釋器運行的優化。在cx_Freeze的選項中設置optimize可優化它生成的字節碼,但解釋器仍然以__debug__ == True運行。

似乎沒有簡單的方法來設置嵌入式解釋器的調試標誌。它忽略了PYTHONOPTIMIZE環境變量。作爲一種變通方法,你可以做使用像調試標誌:

debug = __debug__ and not hasattr(sys, 'frozen') 
+0

你怎麼知道沒有簡單的方法來做到這一點? – JesseTG 2013-03-11 16:38:24

+0

我不確定,但我已經嘗試了明顯的事情(使用-O運行,設置PYTHONOPTIMIZE環境變量),並且它們不起作用。我沒有在文檔或源代碼中看到任何指向某種方式的東西。 – 2013-03-11 20:48:54

+0

該死的。好吧,無論如何,謝謝你。 – JesseTG 2013-03-11 21:08:51

相關問題