如何使用cx_freeze从带有Qt framework(pyside2)的python项目中正确创建一个.exe文件?

时间:2019-11-16 15:50:31

标签: python cx-freeze pyside2

我已经搜索了很长时间,所以我放弃了。我创建了具有所有必需选项的setup.py文件。调用“ python setup.py build”,我得到了正在运行的.exe文件,但仅在我的计算机上。当我尝试在另一台计算机上启动该文件时-它无法启动。因为在最后一个模块的所有模块链中,都是这样的:

"F:\*myfilepath from the original system to*\lib\site-packages\shiboken2\__init__.py", line 27 in <module>
ImportError: DLL load failed:%1 is not Win32 application.

在shiboken的 init .py在第27行上有

from .shiboken2 import *

因此,我已经在第二个系统上冻结了该项目,而在第一个系统上启动了该项目之后-完全相同的问题。在创建.exe文件的系统上,它可以正常启动。我尝试使用Dependacy Walker,将所有可能的.dll丢失了,但是实际上只有Windows api dll实际上不需要被应用程序调用,而这是行不通的。另外,当我尝试使用空项目(仅导入PySide2)制作msi安装程序时,也会出现异常:

Traceback (most recent call last):
  File "setup.py", line 39, in <module>
    executables = [Executable("Namer_main.py", base=base, targetName='Namer.exe'
, icon='dude.ico')])
  File "F:\Programs\Python\Python37-32\lib\site-packages\cx_Freeze\dist.py", lin
e 348, in setup
    distutils.core.setup(**attrs)
  File "F:\Programs\Python\Python37-32\lib\distutils\core.py", line 148, in setu
p
    dist.run_commands()
  File "F:\Programs\Python\Python37-32\lib\distutils\dist.py", line 966, in run_
commands
    self.run_command(cmd)
  File "F:\Programs\Python\Python37-32\lib\distutils\dist.py", line 985, in run_
command
    cmd_obj.run()
  File "F:\Programs\Python\Python37-32\lib\site-packages\cx_Freeze\windist.py",
line 416, in run
    self.add_files()
  File "F:\Programs\Python\Python37-32\lib\site-packages\cx_Freeze\windist.py",
line 139, in add_files
    cab.commit(db)
  File "F:\Programs\Python\Python37-32\lib\msilib\__init__.py", line 215, in com
mit
    FCICreate(filename, self.files)
ValueError: FCI error 1

我的setup.py像这样:

import sys
from cx_Freeze import setup, Executable

build_exe_options = {'include_msvcr': True, "packages": ["os", "sys", "shelve", "random", "re"]}
# GUI applications require a different base on Windows (the default is for a
# console application).

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(name = "Namer",
      version = "0.3",
      description = "Namer GUI App",
      options = {"build_exe": build_exe_options},
      executables = [Executable("Namer_main.py", base=base, targetName='Namer.exe', icon='dude.ico')])

所有问题甚至出现在带有PySide2导入的空项目上。所以我认为主要是shiboken2和cx_freeze兼容性的问题。但是其他人成功了。 规格:Windows 7(x64),Python 3.7.5,最新的PySide2和cx_freeze(来自PyPi)。

0 个答案:

没有答案