1

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

)
4

2 回答 2

0

您应该发布您的 setup.py 以便我们查看它。无论如何,这种效果应该适用于您的 py2exe setup.py。您可能需要调整 bundle_files 和 zipfile 参数才能使用我们的设置。确保将“在此处插入 qt 路径”替换为 QT dll 的正确路径,并为“a.dll”、“b.dll”、“c.dll”等输入实际的 QT dll 名称。

设置.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.
)
于 2013-02-01T17:48:39.143 回答
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
于 2016-03-11T13:42:02.383 回答