2011-10-26 66 views
1

我的PyQt4應用程序的py2exe二進制文件在屏幕上短暫閃爍,然後消失。我不知道爲什麼,但在這裏發生了什麼事之前:py2exe:生成的EXE不加載

我的應用程序並沒有顯示SVG圖像加載時(從EXE),所以我周圍挖了一下,發現我不得不改變我的setup.py包括一個qt.conf和一些DLL。

然後,在包含qt.conf之後,二進制只是停止加載。

我打了qt.conf,發現我的埃克不會加載除非我刪除qt.conf,所以我認爲這是畸形的。

這裏是我的qt.conf

[Paths] 
Plugins = plugins 

我使用絕對路徑,斜槓,反斜槓試了一下,你的名字。我甚至用這個文件複製了整個PyQt4文件夾,但仍然沒有運氣。

如果是相關的,這是我setup.py

import os, sys, glob 

from distutils.core import setup 
from py2exe.build_exe import py2exe 

def find_data_files(source,target,patterns): 
    if glob.has_magic(source) or glob.has_magic(target): 
    raise ValueError("Magic not allowed in src, target") 

    ret = {} 

    for pattern in patterns: 
    pattern = os.path.join(source,pattern) 

    for filename in glob.glob(pattern): 
     if os.path.isfile(filename): 
     targetpath = os.path.join(target,os.path.relpath(filename,source)) 
     path = os.path.dirname(targetpath) 
     ret.setdefault(path,[]).append(filename) 
    return sorted(ret.items()) 

setup(
# zipfile = None, 
    data_files = find_data_files('', '', ['bin/*', 'plugins/iconengines/*', 'qt.conf']), 
    windows = [{'script': 'main.py'}], 
# cmdclass = {'py2exe': Py2exe}, 
    options = { 
    'py2exe': { 
    'bundle_files': 1, 
    'includes': ['sip'], 
    'dll_excludes': ['MSVCP90.dll']#, 'qsvgicon4.dll'] 
    } 
    } 
) 

回答

1

如果我記得沒錯,Py2exe被停產,所以這真的不是安全使用。

我使用cx_Freeze,它從來沒有讓我失敗過一次。它也可能幫助你。

另外,請記住,凍結vs腳本時,路徑是不同的。通常情況下,您需要使用os.path.dirname(sys.executable)進行冷凍(您可以使用hasattr(sys, 'frozen')進行測試),而對於典型的os.path.dirname(__file__)

此外,請確保您正在複製imageformats qt插件目錄。它曾經給人們帶來過問題。 imageformats文件夾也是svg插件所在的位置。你還需要複製PyQt4.QtXmlPyQt4.QtSvg dll's/so(svg插件所要求的)。

我的項目有一個用於cx_Freeze的build_binary.py文件,它可以自動檢測插件目錄並複製所需的內容。它可以幫助你到take a look at it

+0

py2exe似乎有點笨重,而且cx_freeze在Linux上對我很好,所以我會再試一次。我一定會看你的代碼,因爲你的項目在編譯成二進制文件時使用了SVG *和*,所以我猜你的代碼可行!謝謝。 – Blender