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 时出错的主要内容,如果未能解决你的问题,请参考以下文章