包装pygame python脚本用于跨平台

时间:2015-04-21 08:54:00

标签: python pygame packaging

使用pygame模块作为跨平台可执行文件打包python脚本的最佳方法是什么?我需要能够从我的Linux机器编译。我已经尝试过使用PyInstaller,但是,当我运行已编译的可执行文件时,它说它无法找到pygame模块。当我通过Wing IDE调试将其作为python脚本运行时,它运行正常,所以我显然安装了pygame。但是,当我尝试在没有IDE调试的情况下运行时,它无法创建窗口。我的脚本有什么问题,它只能通过Wing IDE运行吗?如何打包我的游戏,以便它可以在任何计算机,Linux或Windows上运行,甚至不需要python或pygame?这甚至可能吗?

我的来源:https://github.com/william1008/TrappedTux

2 个答案:

答案 0 :(得分:0)

PyInstaller可以很好地构建嵌入python和pygame的Windows可执行文件。

以下是我使用的规范文件:

# -*- mode: python -*-
a = Analysis(['MyApplication.py'],
             pathex=['.'],
             hiddenimports=[],
             hookspath=None,
             runtime_hooks=None)

# Remove some weird error message
for d in a.datas:
    if 'pyconfig' in d[0]: 
        a.datas.remove(d)
        break

pyz = PYZ(a.pure)
exe = EXE(pyz,
          Tree('resource', prefix='resource', excludes=[]),
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='MyApplication.exe',
          debug=False,
          strip=None,
          upx=True,
          console=False,
          icon="resource/image/MyApplication.ico")

这会将所有内容(资源)捆绑到一个可执行文件中。但是,您需要使用sys._MEIPATH来访问这些资源。我使用此代码自动检测使用哪条路径:

def resource_path(relative):
    if hasattr(sys, "_MEIPASS"):
        return os.path.join(sys._MEIPASS, relative)
    return relative

答案 1 :(得分:0)

我建议使用cx_Freeze,它相对易于使用,并且支持Windows和OS X