最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本。
这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编译,python毕竟是脚本程序)成一个可执行文件势在必行。
在网上搜了几款关于python打包的程序,使用以后发现Py2exe是比较实用和方便的(py2exe是免费的)。
1.简介
Py2exe可以将一个Python程序打包成exe可执行文件,方便没有Python环境的电脑上使用程序。
使用Py2exe打包需要编写一个打包脚本,执行后可以得到打包文件。对于32位版本,Py2exe可以将程序打包成单文件;对于64位版本,暂时还不支持打包成单文件。
不过,无论如何压缩,目前Py2exe打包出来的程序都还是偏大的。
2.软件准备
首先到py2exe的官网http://www.py2exe.org/ 去下载安装包,注意需要对应自己的python版本,要不然会出现问题。
双击exe文件,一路next下去即可。需要注意的是,32位版本和64位版本必须和Python使用的版本配套。
3.打包流程
py2exe是需要写一个脚本进行打包的操作,使用下面这个专为pygame写就的脚本(参考py2exe官方),可以极大的方便打包操作,注意在使用前修改BuildExe里的各个参数。
#!python
# -*- coding: gb2312 -*-
# 这个脚本专为pygame优化,使用py2exe打包代码和资源至dist目录
#
# 使用中若有问题,可以留言至:
# //eyehere.net/2011/python-pygame-novice-professional-py2exe/
#
# 安装需求:
# python, pygame, py2exe 都应该装上
# 使用方法:
# 1: 修改此文件,指定需要打包的.py和对应数据
# 2: python pygame2exe.py
# 3: 在dist文件夹中,enjoy it~
try:
from distutils.core import setup
import py2exe, pygame
from modulefinder import Module
import glob, fnmatch
import sys, os, shutil
except ImportError, message:
raise SystemExit, "Sorry, you must install py2exe, pygame. %s" % message
# 这个函数是用来判断DLL是否是系统提供的(是的话就不用打包)
origIsSystemDLL = py2exe.build_exe.isSystemDLL
def isSystemDLL(pathname):
# 需要hack一下,freetype和ogg的dll并不是系统DLL
if os.path.basename(pathname).lower() in ("libfreetype-6.dll", "libogg-0.dll", "sdl_ttf.dll"):
return 0
return origIsSystemDLL(pathname)
# 把Hack过的函数重新写回去
py2exe.build_exe.isSystemDLL = isSystemDLL
# 这个新的类也是一个Hack,使得pygame的默认字体会被拷贝
class pygame2exe(py2exe.build_exe.py2exe):
def copy_extensions(self, extensions):
# 获得pygame默认字体
pygamedir = os.path.split(pygame.base.__file__)[0]
pygame_default_font =