Cx_freeze bdist_msi 目录语法?如何解读 'directory_table'

Cx_freeze bdist_msi directories syntax? how to interpret 'directory_table'

我在使用 cx_freeze 生成的 MSI 创建新目录时遇到问题。我不理解 windows direcotry_tables 对象,几乎没有文档解释它。有人成功过吗?

这里是 cx_freeze bdist_msi.

的安装脚本文档

https://cx-freeze.readthedocs.io/en/latest/setup_script.html#commands

关于 'directory tables'

的类似 windows 文档

https://docs.microsoft.com/en-us/windows/win32/msi/directory-table?redirectedfrom=MSDN

我希望我的安装程序在 C:\ProgramData 中创建一个目录,但我不知道要在“directory_table”3 元组中使用什么参数来执行此操作。下面是默认的示例目录 table,它没有错误,但我不确定该目录实际放在哪里。

directory_table = [
    ("ProgramMenuFolder", "TARGETDIR", "."),
    ("MyProgramMenu", "ProgramMenuFolder", "MYPROG~1|My Program"),]

希望之前有人 运行 对此有所了解,感谢您的帮助。 下面是我的 setup.py:

from cx_Freeze import setup, Executable
import sys

company_name = 'MyCompany'
product_name = 'TestTKApp'


#list of 3-tuples.  need help here. 
directory_table = [
    ("ProgramMenuFolder", "TARGETDIR", "."),
    ("MyProgramMenu", "ProgramMenuFolder", "MYPROG~1|My Program"),]

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'
    
build_exe_options = {"includes": ["testmath"],
                     "path" : sys.path,
                     "include_files": [(r"PATH\TO\SOME\FILE","junk.txt")],
                     
                     }

bdist_msi_options = {
    # 'upgrade_code': '{66620F3A-DC3A-11E2-B341-002219E9B01E}',
    'add_to_path': False,
    'initial_target_dir': r'C:\ProgramFiles\%s\%s' % (company_name, product_name),
    'target_name' : 'TestTKapp Installer',
    'directories' : directory_table, 
    "summary_data": {"author": "Me",
    "comments": "Test TKapp",}
    }
setup(name='Test Dist App',
      version = ' 1.0.0',
      executables = [Executable(r"C:\PATH\TO\MY\APP\TestTKAPP.py", base = "Win32GUI")],
      options={'bdist_msi': bdist_msi_options,
               'build_exe': build_exe_options},
      )

最终使用 Inno 脚本创建了我的 MSI。仍然想知道如何处理 with cx_freeze.

请在此处查看有关 inno 脚本的文档。构建 windows 个安装程序的过程要简单得多:

https://jrsoftware.org/isdl.php

总结(如何构建 python exe);

  1. 使用 pipreqs 为我的项目创建一个 requirements.txt
  2. 用那个requirments.txt
  3. 构建虚拟环境
  4. 创建一个 cx_freeze setup.py 脚本来创建 MyApp.exe
  5. 运行 cx_freeze setup.py 来自我的虚拟环境
  6. 使用 Inno 脚本为 MyApp.exe
  7. 创建 windows 安装程序 (msi)