打包
为什么要打包
当你想将Python脚本给别人用时,怎么办?Python运行依赖相关的环境,因此将脚本打包成exe,直接运行exe即可
怎么打包
本文介绍的方法是Pyinstaller
Pyinstaller
安装
想要使用,必须保证该模块存在,可通过如下命令查找模块是否存在
pip list Pyinstaller
不存在安装即可。参考1
PS:曾踩过一个坑,下载PyInstaller时挂着梯子导致下载失败
打包
PyInstaller是通过命令尽心打包的(在终端运行即可),格式如下
pyinstaller 选项 Python 源文件
// e.g.
Pyinstaller -F py_word.py 打包exePyinstaller -F -w py_word.py 不带控制台的打包Pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe图标打包
// 最后的-i chengzi.ico就是指设置自己的图标图案,因为默认打包图片是下图这样的。这个参数也可以写成--icon=chengzi.ico
参数选项 | 说明 |
---|---|
-h,–help | 查看该模块的帮助信息 |
-F,-onefile | 产生单个的可执行文件 |
-D,–onedir | 产生一个目录(包含多个文件)作为可执行程序 |
-K, -tk | 在部署时包含TCL/TK |
-a,–ascii | 不包含 Unicode 字符集支持 |
-d,–debug | 产生 debug 版本的可执行文件 |
-w,–windowed,–noconsolc | 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效) |
-c,–nowindowed,–console | 使用控制台子系统执行(默认)(只对Windows有效) |
-s,-strip | 可执行文件和共享库将run_throughstrip.注意Cygwin的strip往往使普通的win32Dll无法使用 |
-X, -upx | 如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)(参见note) |
-o DIR,–out=DIR | 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件 |
-p DIR,–path=DIR | 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 |
–icon=<FILE.ICO> | 将file.ico添加为可执行文件的资源(只对Windows系统有效) |
–icon=<FILE.EXE,N> | 将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效) |
-V FILE,-version=FILE | 将verfile作为可执行文件的版本资源(只对Windows系统有效) |
-n NAME,–name=NAME | 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
虚拟环境打包
打包之后可以发现,exe非常大,经常300M+。
Python直接打包exe,不但体积大而且运行奇慢。解释型语言大都是这个样子,只不过Python尤其突出。要解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编。
此外,还有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。”
所以我们可以模拟一个新环境,其中只安装我们本次打包所必要的工具包即可。
那最适合的就是——虚拟环境了!
TODO
参考文章
- Python脚本打包成exe,看这一篇就够了!
Python PyInstaller安装和使用教程(详解版) ↩︎