如何在 cx_freeze 和 distutils 中指定 msi 的默认安装路径?

Posted

技术标签:

【中文标题】如何在 cx_freeze 和 distutils 中指定 msi 的默认安装路径?【英文标题】:How do I specify the default install path of an msi in cx_freeze and distutils? 【发布时间】:2012-04-03 03:31:55 【问题描述】:

我正在尝试从我们编写的 Python 应用程序创建安装程序。我写了一个简单的 setup.py 文件,它生成一个 .msi 文件没问题,但我想不出指定默认安装路径的方法。我们不希望它安装到默认的“C:\Program Files”目录。帮忙?

【问题讨论】:

所以我发现我可以将“--initial-target-dir”标志添加到该行:python setup.py bdist_msi --initial-target-dir 但我希望在 setup.py 文件中进行。 【参考方案1】:

在创建安装程序时,Distutils 的功能相当有限。我建议您改用NSIS。它非常简单,并且可以让您自定义比 distutils 更多的内容。

另一种方法是手动将 --initial-target-dir 添加到 setup.py 的参数列表中(在调用 setup 函数之前):

if 'bdist_msi' in sys.argv:
    sys.argv += ['--initial-target-dir', 'c:\default\path']

【讨论】:

对此的警告是我们需要它与 Python 3 兼容,如果我正确阅读该站点,NSIS 不支持。很抱歉之前没有提到这一点。 NSIS 应该适用于任何东西——它不是特定于 python 并且不依赖于 python,所以 python 版本无关紧要。不过,还有另一种方法你也可以做到,我已经用它更新了答案。【参考方案2】:

似乎在当前版本中,将以下内容添加到您的安装脚本可提供相同的功能:

setup(
    ...
    options='bdist_msi': 'initial_target_dir': 'C:\\alternate\\start\\path'
    ...
)

请注意,它需要反斜杠,而不是正斜杠。

【讨论】:

以上是关于如何在 cx_freeze 和 distutils 中指定 msi 的默认安装路径?的主要内容,如果未能解决你的问题,请参考以下文章

cx_freeze 和单文件鸡蛋

如何使用 distutils 安装 Python 扩展模块?

如何将安装后脚本添加到 easy_install / setuptools / distutils?

pip 10 和 apt:如何避免 distutils 软件包的“无法卸载 X”错误

如何在 Python 包的 distutils 安装的构建阶段编译 CoffeeScript?

distutils:如何将用户定义的参数传递给 setup.py?