说实话,你有没有遇到过这种尴尬——辛辛苦苦写了个Python小工具,兴高采烈发给朋友,结果对方一句“双击咋没反应?”把你噎得半死。排查半天,哦,人家电脑里压根没装Python。你耐心解释“要先装个环境”,对方已经关对话框了。
烦吧?我也烦。
后来我翻到一个叫Pynsist的开源工具,哎你猜怎么着——它能把你的Python应用直接打包成一个正儿八经的Windows安装程序(.exe那种),用户双击就能装,装完就能用,根本不需要知道Python是啥。
这玩意儿到底干了啥?
Pynsist的核心思路特别粗暴:它不是把你的代码转成exe(像PyInstaller那种),而是直接把Python解释器和你写的程序、依赖的库一起塞进一个安装包里。用户安装时,相当于在他电脑里“偷摸”装了个便携版Python,然后你的程序就跑在这个小环境上。
你可能会问:那安装包岂不是很大?嗯……确实比单个exe大一点,但一般也就几十兆,现在谁还在乎这点空间啊。
我上手试了试,门槛比想象的低
要用Pynsist,你得先装两个东西:
- • NSIS(Nullsoft Scriptable Install System),一个老牌安装包制作工具,Pynsist幕后调用它来生成exe。
- • 然后
pip install pynsist就完事了。
接下来只需要写一个配置文件,比如叫installer.cfg,大概长这样:
[Application]
name=我的小工具
version=1.0
entry_point=myapp:main # 告诉它从哪个函数启动
icon=myapp.ico
[Python]
version=3.6.3
[Include]
pypi_wheels = requests==2.18.4
beautifulsoup4==4.6.0
files = LICENSE
data/
配置里指定了用Python 3.6.3,依赖的几个库(必须有wheel包,这个稍后吐槽),还有额外文件。然后终端里敲:
pynsist installer.cfg
等一两分钟,一个MyApp-1.0-installer.exe就出现在你面前了。发给朋友,双击,下一步下一步,完事。
它好在哪?又有什么坑?
| |
| 依赖的第三方库必须提供wheel(纯Python库基本没问题,带C扩展的可能翻车) |
| |
| |
| |
我自己的感受是:如果你要发给非技术用户,尤其是公司内勤、客户这类“对电脑只会点图标”的人,Pynsist比PyInstaller省心。因为你扔给他们的是一个标准的setup向导,他们会有“我在装正经软件”的安全感。
一个小建议,别踩我的坑
刚开始我死活打包不成功,后来发现是某个库没有wheel包——Pynsist官网明确说了,pypi_wheels里列出的必须能在PyPI上找到对应的wheel文件。解决办法有两个:要么自己把源码转成wheel(有点折腾),要么换一个替代库。纯Python项目基本一路畅通。
另外,Pynsist 2.7需要Python 3.6+,要是你还困在Python 2.7的旧项目里,可以用1.x版本,但那玩意儿已经没人维护了。听我一句劝,赶紧升上来吧。
最后说句实在的
这种工具吧,不是那种“哇好炫酷”的东西,但特别解渴。尤其是你辛辛苦苦写完一个工具,结果因为分发问题被用户嫌弃——那种憋屈,只有码农懂。Pynsist就是用来捅破这层窗户纸的。
你要是也在为打包发愁,花半小时试试它。项目地址扔这儿了,文档写得挺清楚,example里也有现成配置抄作业。
项目地址: https://github.com/takluyver/pynsist