python - 使用 pygame 将整个文件夹包含在 cx_Freeze 中

标签 python file directory pygame cx-freeze

我一直在关注有关如何为 pygame 文件夹进行 cx_freeze 设置的教程。这是我想出的...

import cx_Freeze
executables = [cx_Freeze.Executable("mainGame - Copy.py")]
cx_Freeze.setup(
    name = "Cave",
    version = "1.0",
    author = "Owen Pennington",
    options = {"build_exe": {"packages":["pygame"], "include_files":["floor_heart.wav"]}},
    executables = executables
    )

但是我的其余文件都在文件夹中。然后这些文件夹里面还有文件夹。例如,我有一个文件夹(路径目录)C:CaveGame\Sprites,此文件夹包含许多其他文件夹,C:CaveGame\Sprites\FloorsC: CaveGame\Sprites\Lava 等...然后我还有一个文件夹 C:CaveGame\Music ,其中包含我所有的音乐文件和音效。我怎样才能让这些全部在设置中工作???

最佳答案

您只需在 options 字典中包含上层目录项即可:

setup(name='Widgets Test',
      version = '1.0',
      description = 'Test of Text-input Widgets',
      author = "Fred Nurks",
      options = { "build_exe": {"packages":["pygame"], "include_files":["assets/", "music/"] } },
      executables = executables
      )

上面的示例将包含文件 assets/images/blah.pngmusic/sounds/sproiiiing.ogg 及其正确的目录。该顶级文件夹下的所有内容都被拉入lib/

当您要加载这些文件时,有必要计算出文件的确切路径。但执行此操作的常规方法不适用于 cxFreeze。引用常见问题解答 https://cx-freeze.readthedocs.io/en/latest/faq.html

if getattr(sys, 'frozen', False):
    EXE_LOCATION = os.path.dirname( sys.executable ) # frozen
else:
    EXE_LOCATION = os.path.dirname( os.path.realpath( __file__ ) ) # unfrozen

显然您需要模块 sysos.path 来实现此目的。

然后在加载文件时,使用os.path.join确定完整路径:

my_image_filename = os.path.join( EXE_LOCATION, "assets", "images", "image.png" )
image = pygame.image.load( my_image_filename ).convert_alpha()

编辑:如果您在 Windows 下构建,则还需要包含 Visual C 运行时:https://cx-freeze.readthedocs.io/en/latest/faq.html#microsoft-visual-c-redistributable-package 。将 include_msvcr 添加到 options

options = { "build_exe": { "include_msvcr", "packages":["pygame"] #... 

关于python - 使用 pygame 将整个文件夹包含在 cx_Freeze 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62728155/

相关文章:

c - C中的二进制文件读/写

c# - DirectoryInfo.Name的异常行为

python - 从 Pandas 数据框中删除零

Python的单元测试、类和方法

linux - 比较 2 个文件夹并查找具有不同字节数的文件

c++ - 如何检测文件是否被覆盖?,

java - 在java中将当前时间戳作为文件夹名称

c# - 在构造函数中创建目录是个坏主意吗?

python - Scrapy:从不在同一目录中的项目导入包

python - 执行 for 循环的最佳方法是什么?