2012-06-04 45 views
3

我已将我设计的python游戏转换为exe。运行exe本身会导致它闪烁然后关闭,这意味着发生了错误。从命令提示符下运行它会导致错误为好,但它记载:哪里把图像文件夹在Python的exe文件?

Cannot load image: Playfield.png 
Couldn't open images\Playfield.png 

这告诉我,load_image块失败。我之前遇到过这个,当时我没有images目录。

我试图将images文件夹移动到dist目录。这是显示的错误:

Traceback (most recent call last): 
    File "Table_Wars.py", line 728, in <module> 
    File "Table_Wars.py", line 51, in main 
    File "Table_Wars.py", line 236, in __init__ 
    File "pygame\__init__.pyc", line 70, in __getattr__ 
NotImplementedError: font module not available 
(ImportError: DLL load failed: The specified module could not be found.) 

这是我第一次用py2exe,所以我不确定发生了什么事。原始python文件本身,Table_Wars.py,按预期运行。

如果有帮助,整个Table_Wars文件夹的位置位于我的桌面(C:\ Users \ Oventoaster \ Desktop \ Games \ Table_Wars)中名为Games的文件夹中。我正在运行Windows 7 32位操作系统。

根据要求,这里是我所产生的output.txt中:

Folder PATH listing for volume OS 
Volume serial number is 7659-4C9C 
C:\USERS\OVENTOASTER\DESKTOP\GAMES\TABLE_WARS 
build 
    bdist.win32 
     winexe 
      bundle-2.7 
      collect-2.7 
       ctypes 
       distutils 
       email 
       mime 
       encodings 
       logging 
       multiprocessing 
       dummy 
       pygame 
       threads 
       unittest 
       xml 
        parsers 
      temp 
dist 
images 

这里是我以前的文件转换setup.py:

from distutils.core import setup 
import py2exe 

setup(console=['Table_Wars.py']) 

编辑:我曾尝试使用完整的py2exe示例。这将创建exe,但给出相同的Cannot load image错误。试图把images文件夹中的相同的文件夹的exe创建Runtime Error: The application requested the runtime to terminate it in an unusual way.

代码Slace钻石的缩短的形式建议防止从寻找Table_Wars.py py2exe:

从CMD:

running py2exe 
*** searching for required modules *** 
error: Table_Wars.py: No such file or directory. 

setupTable_Wars位于相同的目录中。如果有帮助,我输入python.exe和setup.py的完整路径。

编辑:我似乎越来越接近。我把images目录内self.extra_datas,现在我得到这样的:

Fatal Python error: (segmentation fault) This application has requested the runtime to terminate it in an unusual way. Please contact the application's suppourt team for more information

+0

你可以运行'树“C:\用户\ Oventoaster \桌面\游戏\ Table_Wars”> output.txt'和后期输出.txt文件显示出来了吗?这会让我们更好地了解文件的位置。 –

+0

我认为它实际上只是你的py2exe安装文件的一个问题。你可以发布你的'setup.py'吗? – jdi

+0

该问题与工作目录相关,可执行文件的启动位置?相对应该对齐到工作目录,以便正确解决。或者,如果可能的话,尝试在程序中连接图像的完整路径,然后您可以看到地球上的路径没有正确形成。 – zinking

回答

1

当你建立一个分发包py2exe(和py2app为此事),部分包装环境是指到文件的本地资源位置。在您的简单的未打包版本中,您指的是相对“图像/”位置。对于打包版本,您需要配置您的setup.py以将资源包含在其自己的位置。

请参阅本文档有关如何设置data_files选择你的包非常具体的信息:http://www.py2exe.org/index.cgi/data_files

那个网页上有多个例子来说明这两个非常简单的路径,也可用于寻找数据的辅助功能,为您建立data_files名单。

下面是简单的代码片段的例子:

from distutils.core import setup 
import py2exe 

Mydata_files = [('images', ['c:/path/to/image/image.png'])] 

setup(
    console=['trypyglet.py.py'] 
    data_files = Mydata_files 
    options={ 
       "py2exe":{ 
         "unbuffered": True, 
         "optimize": 2, 
         "excludes": ["email"] 
       } 
     } 
) 

此紧密匹配你想达到的目标。这就是说,应该将“image.png”源文件放入包中资源位置根目录下的“images”目录中。该资源根目录将成为您的Python脚本的当前目录,因此您可以继续将其作为相对子目录。

+0

这会在'data_files = MyData_files'处导致语法错误 – Oventoaster

+0

具体是什么语法错误。可能只是一个缩进问题 – jdi

0

看起来您已经通过将文件夹移动到dist来解决了图像问题。另一方面,丢失的字体模块是pygame和py2exe之间的known problem。 Py2exe不会复制一些必需的DLL,因此您必须重写py2exe的isSystemDLL方法,强制它包含音频和字体相关的DLL。

如果Table_Wars.py是在你的项目中唯一模块,尝试用python setup.py py2exe运行此脚本:

from os.path import basename 
from distutils.core import setup 

import py2exe 

origIsSystemDLL = py2exe.build_exe.isSystemDLL 
def isSystemDLL(pathname): 
    if basename(pathname).lower() in ("libogg-0.dll", "sdl_ttf.dll"): 
     return 0 
    return origIsSystemDLL(pathname) 
py2exe.build_exe.isSystemDLL = isSystemDLL 

setup(windows=[{"script": "Table_Wars.py"}], 
     options={"py2exe": {"dist_dir": "dist"}}) 

您也可以尝试在pygame的维基example py2exe setup file。如果他们都没有工作,请将错误消息添加到您的问题。


我试着在一个示例项目上运行py2exe,当我使用默认的pygame字体时,它也打破了我的想法。如果您使用的是默认字体,请尝试将ttf文件放在项目的根目录中,并放在dist文件夹中。你必须改变呼叫pygame.Font在你的脚本,以及:

font = pygame.font.Font("SomeFont.ttf", 28) 
+0

我正在尝试完整的py2exe安装文件,但我得到以下例外: 'Traceback(最近调用最后一个): 文件“C:\ Users \ Oventoaster \ Desktop \ Games \ Table_Wars \第170行,在 BuildExe()。run()#运行代 运行中的文件“C:\ Users \ Oventoaster \ Desktop \ Games \ Table_Wars \ setup.py”,第161行 dist_dir = self.dist_dir System setup,error:“+ str(msg) SystemExit:error:command'C:\ Python27 \ system32.EXE”文件“C:\ Python27 \ lib \ distutils \ core.py” pythonw.exe'以退出状态1失败' – Oventoaster

+0

您是否曾尝试在第打电话给'setup'?我不认为你需要整个安装文件,我只是链接到它,表明该程序是由pygame支持,尽管是py2exe代码的破解。如果您想使用完整的安装文件,请尝试删除''optimize':2',[如另一个问题所示](http://stackoverflow.com/questions/7700089/how-do-i-compile-py-到-A-EXE)。 – Devourant

+0

我尝试了你的sugesstions,并且发生了以下情况: 当我在答案中添加了块时,它没有理由地关闭。另一个建议创建了一个exe文件,但是当我将图像放入dist文件夹时,出现运行时错误。 – Oventoaster