如何解决PyQt和Py2exe应用程序启动错误和问题?

时间:2013-02-01 17:09:30

标签: python dll pyqt py2exe

我使用PyQt构建了一个小应用程序,并使用py2exe进行可执行设置。它在我的笔记本电脑中都很好,但是当我尝试将应用程序分发到其他机器时,它无法打开,在.log文件中出现以下错误。

Traceback (most recent call last):
  File "viewer.py", line 5, in <module>
  File "PyQt4\QtCore.pyo", line 12, in <module>
  File "PyQt4\QtCore.pyo", line 10, in __load
ImportError: DLL load failed: %1 is not a valid Win32 application.

我尝试了很多但却无法得到这个决心。请帮帮我!!

编辑:

这是setup.py

#!/usr/bin/python
import sys
#C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91

#sys.path.append("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\redist\\x86\\Microsoft.VC90.CRT")


import warnings
warnings.filterwarnings(action="ignore", message='the sets module is deprecated')
from distutils.core import setup
import py2exe

manifest = '''
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
version="0.64.1.0"
processorArchitecture="x86"
name="Controls"
type="win32"
/>
<description>Your Application</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
    type="win32"
    name="Microsoft.Windows.Common-Controls"
    version="6.0.0.0"
    processorArchitecture="X86"
    publicKeyToken="6595b64144ccf1df"
    language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
'''

'''
installs manifest and icon into the .exe
but icon is still needed as we open it
for the window icon (not just the .exe)
changelog and logo are included in dist
'''

sys.path.append('C:\\WINDOWS\\WinSxS\\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91')

excludes = ["pywin", "pywin.debugger", "pywin.debugger.dbgcon",
            "pywin.dialogs", "pywin.dialogs.list"]

setup(
#options = {"py2exe": {"includes":["sip"],"dll_excludes": ["MSVCP90.dll"]}},
options = {"py2exe": {"typelibs":
                          # typelib for WMI
                          [('{565783C6-CB41-11D1-8B02-00600806D9B6}', 0, 1, 2)],
                          # create a compressed zip archive
                          "compressed": 1,
                          "optimize": 2,
                          "excludes": excludes,
                          "includes":["sip","PyQt4"]}},

    # The lib directory contains everything except the executables and the python dll.
    # Can include a subdirectory name.
    zipfile = "lib/shared.zip",

windows = [
    {
    "script": "viewer.py",
    #"icon_resources": [(1, "favicon.png")],
    #"other_resources": [(24,1,manifest)]
    }
    ],
    data_files=["msvcm90.dll","msvcp90.dll","msvcr90.dll"]

)

2 个答案:

答案 0 :(得分:0)

您应该发布您的setup.py,以便我们查看它。无论如何,这个效果的东西应该适用于你的py2exe setup.py。您可能必须调整bundle_files和zipfile参数才能使用我们的设置。确保将'insert qt path here'替换为QT dll的正确路径,并输入'a.dll','b.dll','c.dll'的实际QT dll名称,...

setup.py:

# USAGE: 'python setup.py py2exe'
from distutils.core import setup
import py2exe, sys

sys.argv.append('py2exe')

setup(
    data_files=[
                ('.','viewer.ico']),
                ('insert qt path here', ['a.dll','b.dll', 'c.dll'])
               ],

    options={'py2exe':{
                       'bundle_files':   1, # 3 - Don't pack, 2 - Pack all but interpreter, 1 - pack all.
                       'unbuffered':     True,
                       'optimize':       2,
                       'compressed':     1
                      },
            }, 

    windows=[
             {
              'script':'viewer.py',
             },
            ],

    zipfile = None# None = All in EXE does not work with tcl/ttk gui's, Else 'shared.lib' make a lib file with name specified.
)

答案 1 :(得分:0)

错误消息

  File "form1.pyc", line 11, in ?
  File "qt.pyc", line 9, in ?
  File "qt.pyc", line 7, in __load
ImportError: No module named sip

解决方案

python setup.py py2exe --includes sip