使用cx_freeze和bdist_msi为PySide应用程序创建MSI

Pra*_*ian 4 python distutils pyside cx-freeze python-3.x

我有一个PySide应用程序,我正在尝试使用cx_freeze打包到MSI中.我可以成功创建一个MSI安装程序,但是我无法确定如何列出要包含在软件包中的其他模块.这是我的setup.py脚本:

import sys
from cx_Freeze import setup, Executable

company_name = 'My Company Name'
product_name = 'My Gui'

bdist_msi_options = {
    'upgrade_code': '{66620F3A-DC3A-11E2-B341-002219E9B01E}',
    'add_to_path': False,
    'initial_target_dir': r'[ProgramFilesFolder]\%s\%s' % (company_name, product_name),
    # 'includes': ['atexit', 'PySide.QtNetwork'], # <-- this causes error
    }

# GUI applications require a different base on Windows
base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

exe = Executable(script='MyGui.py',
                 base=base,
                 icon='MyGui.ico',
                )

setup(name=product_name,
      version='1.0.0',
      description='blah',
      executables=[exe],
      options={'bdist_msi': bdist_msi_options})
Run Code Online (Sandbox Code Playgroud)

我可以使用该命令成功创建MSI

python setup.py bdist_msi
Run Code Online (Sandbox Code Playgroud)

但根据包装PySide应用程序的文档,我需要包含模块atexitPySide.QtNetwork.我尝试通过添加'includes'密钥来执行此操作bdist_msi_options,但取消注释该行会导致以下错误:

running bdist_msi
error: error in setup script: command 'bdist_msi' has no such option 'includes'
Run Code Online (Sandbox Code Playgroud)

如何将这些模块与生成的可执行文件一起包含在内?

Pra*_*ian 7

我在cx-freeze邮件列表上发布了相同的问题,并收到了答复.

'includes''packages'选项的'build_exe'命令,因此呼叫设置需要包括两个命令.

bdist_msi_options = {
    'upgrade_code': '{66620F3A-DC3A-11E2-B341-002219E9B01E}',
    'add_to_path': False,
    'initial_target_dir': r'[ProgramFilesFolder]\%s\%s' % (company_name, product_name),
    }

build_exe_options = {
    'includes': ['atexit', 'PySide.QtNetwork'],
    }

...

setup(name=product_name,
      version='1.0.0',
      description='blah',
      executables=[exe],
      options={
          'bdist_msi': bdist_msi_options,
          'build_exe': build_exe_options})
Run Code Online (Sandbox Code Playgroud)