说实话,每次把我写好的Python小工具发给非技术朋友,对方一句“双击咋没反应?”我就知道——完了,又得解释“你要先装Python,还要装依赖包”。一来二去,对方头大,我也心累。直到我遇到了Pynsist,这玩意儿简直就是救星。
什么是Pynsist?
简单说,Pynsist是一个能把你的Python程序打包成Windows安装程序的工具。用户拿到后双击安装,就跟装QQ、微信一样,完事直接点图标运行——他们根本不需要知道Python是啥。
你可能会说:“PyInstaller不也能打包成exe吗?”对,但Pynsist的思路不一样。它不是把代码和Python解释器揉成一个巨型exe,而是把Python、你的代码、依赖包全部塞进一个标准的NSIS安装包里。装完后,桌面上就有个快捷方式,点开就能跑。个人感觉这种方式更“正规”,而且更新某个依赖文件也更灵活。
快速上手,三分钟搞定
安装Pynsist之前,你需要先装一个叫NSIS的工具(Nullsoft Scriptable Install System,别怕,就是安装包制作器)。装好之后,命令行里敲:
pip install pynsist
然后写一个配置文件,比如叫 installer.cfg。举个例子,假设你写了个叫“我的计算器”的程序,入口是 calculator.py 里的 main 函数,配置文件长这样:
| 小节 |
内容 |
说明 |
[Application] |
name=我的计算器 version=1.0 entry_point=calculator:main |
应用名称、版本号、启动命令 |
[Python] |
version=3.6.3 |
要捆绑的Python版本 |
[Include] |
pypi_wheels = requests==2.18.4 beautifulsoup4==4.6.0 |
依赖包(必须是有wheel的) |
files |
LICENSE data/ |
额外需要打包的文件或文件夹 |
写好之后,运行:
pynsist installer.cfg
等几秒钟,build/nsis/ 目录下就会蹦出一个 MyAppInstaller.exe。发给朋友,双击,安装,搞定。详细的配置说明在官方文档中都有,上手很简单。
一个小坑,你得知道
依赖包必须要有wheel文件。什么意思?比如你用了 numpy 或 pandas,它们默认不提供wheel(至少旧版本这样),Pynsist就直接报错。知道为什么吗?因为Pynsist依赖PyPI上预编译的wheel包来嵌入,没法从源码给你现编一个。解决办法有两个:要么自己去找别人编译好的wheel,要么换一个纯Python的替代库。我第一次用的时候就卡在这儿,折腾了半天才明白——别像我一样踩坑。
另外,Pynsist 2.7要求你的Python版本在3.6以上。如果你还在用Python 2.7,那得找1.x的老版本,不过还是赶紧升级吧,别守着了。
适合谁用?
- 你写了个数据分析小工具,要给财务同事用
- 你做了个GUI应用(用PyQt、Tkinter都行),想发给客户试玩
- 你烦透了跟每个人解释“pip install xxx”
- 甚至你只是想把自己写的脚本包装得正式一点,发给面试官也体面
反正我自己的那个小工具,之前一直羞于出手,用Pynsist打了个安装包之后,感觉瞬间“产品化”了。
最后唠叨两句
Pynsist不是什么大而全的打包神器,它解决的就是把Python程序发给Windows普通用户这个具体痛点。不复杂,但真管用。如果你也受够了那些反人类的打包流程,不妨试试它。
项目地址: https://github.com/takluyver/pynsist
|