pyinstaller学习笔记

来源:互联网 发布:python实现登录接口 编辑:程序博客网 时间:2024/04/29 08:26

python d:/pyinstaller-1.3/configure.py
python d:/pyinstaller-1.3/Makespec.py client.py --onefile --windowed --icon=client.ico
python d:/pyinstaller-1.3/build.py client.spec

 

原来一直用py2exe来打包,据说用-bundle参数可以打成一个exe文件,而不是一个目录。不过我从来美哟成功地实现过这个功能,好像说是哪个zip模块没有,后来也没试过。最近看到pyinstaller也能打包,而且功能更强大,还不仅限于windows的exe文件,在*nix环境下也都能适用,于是down过来试试。 down下来几天都没玩过,正好最近刚做了个小程序,于是决定拿它练手。稍微看了下manual,pyinstaller自称不是python包,因此不必装在site-package下。不管它,拷在这个目录下找起来比较方便。它不用安装,所以直接拷过去就行。目录下有很多文件,按照manual说的,先执行一下config.py,据说如果python更新了就得再执行一遍这个。执行后出来一堆话,有些是Warning,说一些模块不可用,反正先试试吧。然后看了一堆介绍,主要讲makespec和build的,看完这两个,后面的blah blah都懒得看了,因为 manual字太小,还不能调整,真是的。看了半天,还不是很懂,先看看有没有例子,发现manual里没提,不过目录里倒是有个test文件夹。里面有现成的spec文件,于是用build试了一下。不成,报错。于是用makespec重新做 specfile。不过生成在当前目录了,再试build,就可以了。出现build和dist两个目录,里面各有一个exe文件。用build目录里那个会报错,dist里那个没反应,很是火大。反正能编出exe了,我就用这个新程序试试,嗯,挺顺利的,不过点dist里那个exe仍然没反应。不知道是pyinstaller的问题还是我程序的问题。于是决定拿一个以前编的小程序再试一次。这一次终于OK了,看来是程序的问题。重新调试了程序,找到了bug,再用pyinstaller,行了,看来还真是挺好用的。不过我还希望打成一个文件,而不是一个目录,否则和py2exe没啥区别了。 manual写得挺清楚的,只要在makespec的时候加-F参数就行,另外,再加上-w,就可以不出现 console了,这也是我想要的。-F还是大小写敏感的,第一次用-f还报错。执行makespec.py -F -w setwallpapers.pyw就生成了一个exe文件,原来dist文件夹没有了, build文件夹里也没有exe了。太好了!不过执行后弹出warning,msvcr71.dll的fatal error。不过程序运行倒是挺正常的,奇怪!上网查了下,果然有这个bug,好像是因为msvcr71.dll的大小写问题。好在有人解决了这个问题,当然,作者认为那只能在windows下行得通,他正在想办法做全局解决方案。反正我在windows下用,所以先用那个方案,在build.py中Analasis类里的assemble函数里有句话: binaries.extend(bindepend.Dependencies(binaries)) 只要在后面加一句: binaries = [binary for binary in binaries if binary[0].lower() != 'msvcr71.dll'] 这样,原来那个症状就消失了,OK,一切正常,只是执行exe后,进程中会出现两个这样的程序,一个内存6M,一个1.5M。不过没关系,我已经得到我想要的。 pyinstaller挺不错的,也很简单,打算以后用这个代替py2exe了。下次再找找,能不能打成安装包的。

原创粉丝点击