cx_Freeze - 从桌面快捷方式运行 .exe 时出错

Posted

技术标签:

【中文标题】cx_Freeze - 从桌面快捷方式运行 .exe 时出错【英文标题】:cx_Freeze - Error when running .exe from desktop shortcut 【发布时间】:2017-10-12 13:30:23 【问题描述】:

我的 Pygame 应用程序在 cx_Freeze 中编译为 msi 后从 .exe 文件完美运行,但是当我从桌面快捷方式运行它时,我收到错误:

快捷方式目标正确,声音文件都在正确的目录中,我尝试了.wav.ogg文件并降低了比特率等,但似乎没有任何效果。令人沮丧的是,当我打开目标位置并手动运行.exe 时,它运行完美。我无法弄清楚为什么桌面快捷方式会导致错误。

这是我的setup.py 文件:

import sys
import cx_Freeze

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

executables = [cx_Freeze.Executable(
    script="a_bit_racey.py",
    base=base,
    icon="car_icon.ico",
    shortcutName="A bit Racey",
    shortcutDir="DesktopFolder")]

cx_Freeze.setup(
    name="A bit Racey",
    options="build_exe": "packages": ["pygame"],
                           "include_files": ["racecar.png", "Crash.ogg", "Ecstasy_X.ogg",
                                             "car_icon.ico"],
    executables=executables
)

我是否缺少快捷方式所需的 msi 属性?我已经坚持了一周。

编辑:这是一个可以更好地解释的屏幕截图,因为我得到的回应很少:

使用 cx_Freeze 创建的桌面快捷方式具有正确的目标位置,甚至似乎运行 .exe 文件,但随后出现错误。然而,当我打开目标位置并双击.exe 文件时,它运行良好!!

【问题讨论】:

cx-freeze.readthedocs.io/en/latest/faq.html#data-files 请确保在后台使用绝对路径,就像这个 cx_Freeze 文档似乎让我相信。显然在"include_files" 列表中这些是相对的。你有找到 f(x) 的 data_dir 吗? @seanmus:是的,作为构建设置脚本的一部分,所有数据文件都在“include_files”语句中正确命名。我不知道你所说的 f(x) 是什么意思。你能详细说明一下吗? 在“使用数据文件”一节中,您是否有类似于文档中提供的功能? exe从文件夹运行正常的原因是工作目录。快捷方式不存在的原因是相同的。 @seanmus:我要道歉——它需要一些调整,我必须弄清楚在哪里调用代码,但你的原始评论是正确的。请将其添加为答案,我会评价它。我还将添加一条评论来解释我为使其工作所做的工作,因为互联网上几乎没有关于它的任何地方。谢谢! 【参考方案1】:

cx-freeze.readthedocs.io/en/latest/faq.html#data-files

请确保在后台使用绝对路径,就像这个 cx_Freeze 文档似乎让我相信。显然在“include_files”列表中这些是相对的。你有 data_dir 查找功能吗?如果没有查看“使用数据文件”部分的文档。

【讨论】:

附加信息:将find_data_file 函数放入您的主.py 文件(不是安装文件)。您需要在顶部添加import os。下面是一个如何为您需要加载的每个数据文件(适用于声音文件、音乐、图像等)调用函数的示例:首先,为文件路径声明一个变量:racecar_path = find_data_file("racecar.png"),然后将您的加载语句更改为: car_img = pygame.image.load(racecar_path) 对每个数据文件都做同样的事情,在你的.msi 文件用 cx_Freeze 构建后,它就会安装并正确运行!

以上是关于cx_Freeze - 从桌面快捷方式运行 .exe 时出错的主要内容,如果未能解决你的问题,请参考以下文章

.msi 使用 cx_Freeze 的快捷方式

cxfreeze打包python程序的方法说明(生成安装包,实现桌面快捷方式删除快捷方式)

iOS 实现桌面快捷方式-快速打开App功能页

消除桌面快捷方式箭头

为啥桌面上的图标都变成了网络快捷方式,怎样恢复原状

将桌面快捷方式部署到运行 Windows CE 4.2 (VS2005) 的设备