PyInstaller生成的.exe文件无法运行。

5

编辑:我发现错误在于资源无法打开。将目录复制到.exe所在的文件夹中并没有解决问题。我尝试从.spec文件中移除资源,.exe文件的大小现在为9 MB,而不是52 MB,所以我相信资源已经被包含了,但是某种方式它们似乎无法被.exe打开。如果有任何问题,请参考此处我的.spec文件 - 我只修改了Tree部分来包括资源,.exe文件名和图标。

换句话说,现在的问题是:为什么.exe找不到我的游戏资源,我需要做什么来解决这个问题?还有,我意识到我的资源文件夹有两个子文件夹 - 这是否意味着我必须以不同的方式编写Tree?

我用Python(也使用了Pygame)制作了一个游戏,并希望制作一个单独的可执行文件以便分发。PyInstaller似乎非常适合这个需求,在一段时间的搜索之后,我在这篇指南中找到了如何让它工作的方法。在调整代码以使第2步起作用后,我创建了.spec文件,将包含资源的目录添加到其中(如步骤5中所述,并包括字体文件),将其复制到.spec文件所在的相同文件夹中,最后我运行了命令:

build.py game.spec

我找到了.exe文件,它正位于它应该在的位置。但是当我打开它时,它会在几秒钟后再次关闭,而且我认为这是在主菜单出现之前。我不确定是否再次出现了字体问题,因为我确保将其包含在资源中...
不幸的是,在网上寻找解决方案并没有帮助我,尤其是因为一半的项目链接现在都已经失效。
如果有人知道这里出了什么问题(或需要更多细节),请告诉我。
详细信息:
Python版本:2.7.7 32位
Pygame版本:1.9.3 32位
PyInstaller版本:1.5 32位
系统:Windows 8.1 64位(32位程序目前都运行良好)。
3个回答

8
尝试打开命令提示符,拖动exe文件到其中并按回车键,这样您就可以捕获错误(如果有的话),然后更新您的问题,更多的信息==更多的帮助。
我从未使用过pyinstaller,所以在这方面无法真正地帮助您。
另外,我建议您尝试py2exe,它与pygame很好地配合(至少对我来说是这样),之后您可以使用NSIS或Inno制作设置。
编辑:
如果.exe无法永久保存高分数(如您在下面的评论中所说),请以管理员身份运行exe,这可能只涉及写入权限,或者可能是您的防病毒软件不允许它进行写入(Avast中的沙箱,在诺顿中为未知/罕见文件)。

谢谢!我已经这样做了,但根据错误提示,它仍然找不到我的资源。我尝试将目录复制到与游戏相同的文件夹中,但也没有起作用,所以我猜资源出了问题,但我不确定是什么 - 我很快就会编辑我的问题。至于py2exe,我实际上也尝试过,而且它也起作用了,但只有一段时间。我不知道为什么,但几天后它停止工作了,无论我尝试什么都不起作用,除了一个简单的Hello World程序。我在这里也有一个关于此的问题,但它仍未得到回答... - MMM
听起来你没有告诉 PyInstaller 在哪里查找资源,或者它太笨了找不到。再次声明,我不知道它是如何工作的,所以可能说错了。 - frainfreeze
我建议使用py2exe。 - ρss
@pss 哈哈,我觉得这种方法应该更好用一些,但是在转向 PyInstaller 之前,我已经坚持使用 py2exe 很久了(如果你看一下我上次提问的时间戳,已经有6个月了),由于失去了大量的睡眠和理智,我实际上已经生病了。而且我仍然不知道为什么它决定不再转换我的游戏,也不再转换之前可以工作的游戏版本,但它仍然可以编译“ Hello World”。基本上,只有当有人告诉我如何解决我一直遇到的“分段错误”问题时,我才会再考虑/能够再次使用 py2exe。 - MMM

1
我没有找出问题所在,但我设法让它工作了。我首先使用pip安装了更新版本的PyInstaller(2.1),然后再次完成相同的步骤,但这次是在Scripts目录下运行pyi-makespec和pyi-build,而不是makespec.py和build.py,因为新版本是这样工作的。起初,除非我从cmd中运行它,否则它仍会抱怨缺少资源,但我认为那实际上是因为我忘记了第5步(makespec文件中的Tree)。由于某种原因,现在.exe无法永久保存高分,但除此之外,它完美地工作着。

0

虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分,并提供链接作为参考。仅有链接的答案如果链接页面发生变化可能会失效。- 来自评论 - doneforaiur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接