在python exe中将图像文件夹放在何处?

在python exe中将图像文件夹放在何处?,python,pygame,py2exe,Python,Pygame,Py2exe,我已经将我设计的python游戏转换为exe。运行exe本身会导致它闪烁然后关闭,这意味着发生了错误。从命令提示符运行它也会导致错误,但会记录它: Cannot load image: Playfield.png Couldn't open images\Playfield.png 这告诉我,load\u image块失败。我以前在没有images目录时遇到过这种情况 我试图将images文件夹移动到dist目录。这就是显示的错误: Traceback (most recent call la

我已经将我设计的python游戏转换为exe。运行exe本身会导致它闪烁然后关闭,这意味着发生了错误。从命令提示符运行它也会导致错误,但会记录它:

Cannot load image: Playfield.png
Couldn't open images\Playfield.png
这告诉我,
load\u 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.)
下面是我用来转换文件的setup.py:

from distutils.core import setup
import py2exe

setup(console=['Table_Wars.py'])
编辑:我尝试使用完整的py2exe示例。这将创建exe,但会产生相同的
无法加载图像
错误。试图将
图像
文件夹与exe放在同一文件夹中会产生
运行时错误:应用程序请求运行时以异常方式终止它。

建议使用的代码Slace菱形的缩写形式阻止py2exe查找
表\u Wars.py

从cmd:

running py2exe
*** searching for required modules ***
error: Table_Wars.py: No such file or directory.
设置
表格
在同一目录中。如果有帮助,我将输入python.exe和setup.py的完整路径

编辑:我似乎越来越近了。我将
images
目录放在
self.extra_data
中,现在我得到以下信息:

致命Python错误:(分段错误)

此应用程序已请求运行时以异常方式终止它。请联系应用程序的支持团队以获取更多信息

当您使用py2exe(以及py2app)构建可分发包时,包环境的一部分是指向文件的本地资源位置。在普通的未打包版本中,您指的是相对的“images/”位置。对于打包版本,您需要配置
setup.py
以将资源包含在自己的位置

有关如何设置软件包的
数据文件
选项的详细信息,请参阅本文档:

该页面有多个示例来显示非常简单的路径,还有一个用于查找数据和为您构建
data\u文件
列表的帮助函数

下面是一个简单片段的示例:

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脚本中的当前目录,因此您可以继续将其作为相对子目录引用。

看起来您已经通过将文件夹移动到dist中解决了图像问题。另一方面,缺少的字体模块是pygame和py2exe之间的一个连接。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 wiki上尝试。如果两者都不起作用,请将错误消息添加到问题中


我尝试在一个示例项目上运行py2exe,当我使用默认的pygame字体时,它也会中断。如果您使用的是默认字体,请尝试将ttf文件放在项目的根目录和dist文件夹中。您还必须在脚本中将调用更改为
pygame.Font

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

你能运行
tree“C:\Users\Oventoaster\Desktop\Games\Table\u Wars”>output.txt
并发布显示的output.txt文件吗?这将使我们更好地了解文件的位置。我认为这实际上只是py2exe安装文件的问题。你能发布你的
setup.py
吗?这个问题与可执行文件的起始工作目录有关?相对应与工作目录对齐,以便正确解析。或者,如果可能的话,尝试在程序中连接图像的完整路径,然后您可以看到路径到底是如何形成的。具体的语法错误是什么。可能只是一个缩进问题我正在尝试完整的py2exe安装文件,但我得到了一个例外:
回溯(最近一次调用):文件“C:\Users\Oventoaster\Desktop\Games\Table\U Wars\setup.py”,第170行,在BuildExe().run()#运行生成文件“C:\Users\Oventoaster\Desktop\Games\Table\U Wars\setup.py”,第161行,在运行dist_dir=self.dist_dir文件“C:\Python27\lib\distutils\core.py”的第169行中,在安装程序raise SystemExit中,“error:+str(msg)SystemExit:error:命令“C:\Python27\pythonw.exe”失败,退出状态为1
在调用
安装程序之前,您是否尝试只添加发布的代码?我认为您不需要整个安装文件,我只是链接到它以显示该过程受pygame支持,尽管它是py2exe代码的黑客。如果要使用完整的设置文件,请尝试删除
'optimize':2
。我尝试了您的建议,结果发生了以下情况:当我在答案中只添加了块时,它无缘无故地关闭了。另一个建议创建了一个exe,但当我将图像放在dist文件夹中时,出现运行时错误。我在帖子中添加了一个脚本,请告诉我运行该脚本时会发生什么。至于wiki的例子,你能发布这个错误吗?我用一些关于指定ttf的信息更新了我的帖子。如果您使用的是默认字体(即将
None
传递给
pygame.font.font
),则可能会有所帮助。
font = pygame.font.Font("SomeFont.ttf", 28)