我有一个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})
我可以使用命令
成功创建MSIpython setup.py bdist_msi
但根据用于打包PySide应用程序的documentation,我需要包含模块atexit
和PySide.QtNetwork
。我尝试将'includes'
密钥添加到bdist_msi_options
,但是取消注释该行会导致以下错误:
running bdist_msi
error: error in setup script: command 'bdist_msi' has no such option 'includes'
如何将这些模块与生成的可执行文件一起包含在内?
答案 0 :(得分:6)
我在cx-freeze邮件列表上发布了相同的问题,并收到了an answer。
'includes'
和'packages'
选项用于'build_exe'
命令,因此对setup的调用需要包含这两个命令。
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})