【问题标题】:How to resolve PyQt and Py2exe application startup errors and issues?如何解决 PyQt 和 Py2exe 应用程序启动错误和问题?
【发布时间】:2013-02-01 17:09:29
【问题描述】:

我使用 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"]

)

【问题讨论】:

    标签: python dll pyqt py2exe


    【解决方案1】:

    您应该发布您的 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.
    )
    

    【讨论】:

      【解决方案2】:

      错误信息

        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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-05
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        相关资源
        最近更新 更多