在开发Python应用时需要交付客户,可以使用pyinstaller库来打包成exe文件,在用winzip等自解压格式包装成安装文件交付客户,这次记录一下步骤
- 在工程根目录下新建一个打包脚本 packup.py
- 在工程根目录下创建icon图标,mainIcon.ico
比如我的目录结构如下

- 打开packup.py
-
import os from PyInstaller.__main__ import run if __name__ == '__main__': base=os.path.abspath(os.path.dirname(__file__))+"/frame" pp =base + "/main.py" pp2=base+"/common" pp2_1=base+"/res" pp3=base+"/res/jackinfo.png;./" pp4=base+"/controls/testData.json;controls" pp5=base+"/config.cfg;../" # opts=[pp,'-F','-p={0}'.format(pp2),'--icon=mainIcon.ico'] opts=[pp,'-p={0}'.format(pp2), '--add-data={0}'.format(pp3), '--add-data={0}'.format(pp4), '--add-data={0}'.format(pp5), '--add-data={0}'.format(pp2_1), '--icon=mainIcon.ico'] run(opts)下面来解析每一段的含义
-
首先是这个
base=os.path.abspath(os.path.dirname(__file__))+"/frame"还记的第一张图我的工程目录结构吗?这个frame代表是需要打包到安装程序的根目录,也是软件的根目录
-
接下来这个
pp =base + "/main.py"
这个main.py是主入口,最后也会打包成main.exe并赋予图标

- 然后是参数,第一个参数-p 表示项目中涉及依赖的文件或目录的路径,也就是项目需要import 加载到的文件,有时候import写法不能让python解析器关联到,就需要手动设置这一参数
pp2 = base + "/common"
- 然后是项目需要用到但是不需要依赖的,比如一些图片,配置文件等资源文件,使用参数--add-data
pp2_1=base+"/res"
pp3=base+"/res/jackinfo.png;./"
pp4=base+"/controls/testData.json;controls"
pp5=base+"/config.cfg;../"
多个文件间可以用引号隔开,如/res/jackinfo.png;./
- 最后一个是icon图标,用刚刚创建的图标文件
--icon=mainIcon.ico
- 最后传这个opts对象给run函数跑一下
run(opts)
其他可选参数:
| -F | -onefile,打包成一个exe文件 |
| -D | -onefile,创建一个目录,包含exe文件,但会依赖很多文件(默认选项) |
| -c | -console,-nowindowed,使用控制台,无窗口(默认) |
| -w | -Windowed,-noconsole,使用窗口,无控制台 |
最后运行packup.py,看一下打包的效果:

可以看到最后的代码和依赖库都打包成了dll文件

完结,转载请注明文章出处
这篇博客介绍了如何使用PyInstaller将Python应用打包成exe文件,并进一步用winzip制作成自解压安装包。首先创建packup.py脚本,设置项目根目录和主入口文件main.py,然后指定依赖路径和资源文件,通过--add-data参数添加非依赖资源,最后设置图标。运行packup.py后,Python应用及其依赖会被打包成dll文件,形成可交付给客户的安装程序。
1927

被折叠的 条评论
为什么被折叠?



