http://tieba.baidu.com/p/3060401749?traceid=
安装 pyinstaller
然后
第一步你的脚本里面要做相应处理,添加一个函数:
def resource_path(self,relative):
if hasattr(sys, "_MEIPASS"):
return os.path.join(sys._MEIPASS, relative)
return os.path.join(relative)
假设你的资源文件为logo.gif,放在data目录下(data与sea.py在同一级目录),你的脚本这样引用资源:
data_dir = "data"
self.photo=PhotoImage(file=self.resource_path(os.path.join(data_dir, 'logo.gif')))
self.Canvas1.create_image(240,35,image =self.photo)
第二步生成.spec文件,假设你的图标放在source\image下面(这个路径是Pyinstaller所在路径),名为sea.ico,你的脚本是sea.py,那么命令如下::
pyinstaller.py -F -i source\images\sea.ico D:\\Application\pyinstaller-2.0\sea_project\sea.py
此时会打包一个exe文件,图标已经是打包进去了,不过运行这个exe时会报错,错误提示是找不到logo.gif。
第三步,也是最关键,最难理解的一步,修改spec文件,打开上面一步生成spec文件:
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'sea_project\\sea.py')],
pathex=['D:\\Application\\pyinstaller-2.0'],
hiddenimports=[],
hookspath=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'sea.exe'),
debug=False,
strip=None,
upx=True,
console=False , icon='source\\images\\icon-windowed.ico')
在a.datas,这一行下面添加 [('\\data\\logo.gif','D:\\Application\\pyinstaller-2.0\\sea_project\\data\\logo.gif','DATA')],
最后一步,重新打包:
python pyinstaller.py D:\Application\pyinstaller-2.0\sea\sea.spec
重新生成一个sea.exe文件,这回运行就不会报错了,图标和图片都被打包到一个exe文件里了。