2011-10-26 2 views
1

내 PyQt4 애플리케이션의 py2exe 바이너리가 화면에서 잠깐 깜박였다가 사라집니다. 왜 그런지는 모르겠지만 이전에 있었던 일이 여기에 있습니다.py2exe : 생성 된 EXE가로드되지 않습니다.

내 응용 프로그램은 (Exe에서)로드 할 때 SVG 이미지를 표시하지 않으므로 약간 파고 들어가서 내 setup.py을 수정해야한다는 것을 알았습니다. qt.conf 및 일부 DLL

그런 다음 qt.conf이 포함 된 후 바이너리 로딩이 중지되었습니다.

은 내가 qt.conf와 함께 연주하고 내 exe는 내가 qt.conf 삭제하지 않는 를로드하지 않는 것을 발견, 그래서 나는 그것이 잘못된 생각합니다.

가 여기 내 qt.conf : 나는 절대 경로, 슬래시, 백 슬래시와 함께 그것을 시도

[Paths] 
Plugins = plugins 

, 당신은 그것을 이름을 지정합니다. 나는 심지어이 파일과 함께 전체 PyQt4 폴더를 복사했지만 여전히 운이 없다. 만약 내가 기억

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에 중단, 그래서 정말 안전하게 사용할 수 없습니다 : 그것은 관련이있는 경우

, 여기 내 setup.py입니다.

cx_Freeze를 사용합니다. 한 번 작동하지 못했습니다. 너를 도울지도 모른다.

또한 고정 된 경로와 스크립트의 경로가 다릅니다. 일반적으로 냉동을 위해 os.path.dirname(sys.executable) (hasattr(sys, 'frozen')을 사용하여 테스트 할 수 있음)이 필요합니다 (대개 os.path.dirname(__file__)).

또한 imageformats qt 플러그인 디렉토리를 복사하고 있는지 확인하십시오. 그것은 전에 사람들에게 문제를 일으켰습니다. imageformats 폴더는 svg 플러그인이있는 곳입니다. 또한 PyQt4.QtXmlPyQt4.QtSvg dll을 복사해야합니다 (svg 플러그인에서 필요함).

내 프로젝트에는 플러그인 디렉토리를 자동으로 감지하고 필요한 사항을 복사하는 cx_Freeze 용 build_binary.py 파일이 있습니다. take a look at it에 도움이 될 수 있습니다.

+0

py2exe가 다소 복잡하고 cx_freeze가 Linux에서 잘 작동 했으므로 또 다른 기회를 제공 할 것입니다. 분명히 코드를 살펴볼 것이고, 프로젝트가 SVGs *와 *를 바이너리로 컴파일 할 때 사용하기 때문에, 코드가 작동한다고 생각합니다! 감사. – Blender