我刚开始尝试将我的python代码转换为.app文件来运行它。我成功地能够创建.app文件,但是每当有图片时我都会收到错误消息。它找不到文件或目录。所以,我将它们放在setup.py中的data_files中,如下所示:
from setuptools import setup
from glob import glob
DATA_FILES = [
('images', glob('GamePics/*.gif')),
]
setup(app=['Wellness Game.py'],
data_files=DATA_FILES,
setup_requires=["py2app"])
然后我使用新的setup.py重新创建.app文件,但我仍然收到相同的错误消息。这就是我在源代码中引用图片的方式。
downstairspic=PhotoImage(file="../GamePics/DownStairs.gif")
请帮忙!我不明白为什么它不起作用!
答案 0 :(得分:0)
您需要引用相关于要加载的python文件的文件。在你的情况下,一个简单的
downstairspic=PhotoImage(file="os.path.join(
os.path.dirname(__file__), ../GamePics/DownStairs.gif")
)
在每个python模块中(除了 main - 模块之外),文件应该指向该模块所在的绝对路径。
这里也有一些替代方案 - setuptools资源,就像你在Mac上一样,你也可以使用
NSBundle.mainBundle().pathForResource_ofType_("DownStairs", "gif")
但这意味着你需要pyobjc。
以下setup.py
对我有用:
导入系统 来自setuptools导入设置,find_packages import glob,subprocess import os
ICON = "Cyclops.icns"
plist = {
"CFBundleIconFile" : ICON,
"CFBundleIdentifier" : "com.laseranimation.Cyclops",
}
execfile("cyclops/version.py")
setup(
name = "Cyclops",
version = VERSION,
packages = find_packages(),
author = "Diez B. Roggisch",
author_email = "deets@web.de",
description = "A flexible Laser-Scanner to OSC converter with Filtering",
license = "",
keywords = "python pyobjc",
app=["Cyclops.py"],
data_files=["English.lproj", "Resources/" + ICON] + glob.glob("Resources/*qtz"),
options=dict(py2app=dict(
plist=plist,
)),
)