前几日,我做了一个简单地划词翻译工具,还挺好用的,但是作为一个python脚本,每次都要打开命令行去执行或者是用spyder太过麻烦了,本来就是想简单简单再简单,所以一心搞事的我又踏上了艰难的python打包之旅。
python打包成exe执行文件是挺费劲的,毕竟python本身是没有这个工具的。我用的anaconda也没有这个功能。经过查阅资料,我发现其实python有两个比较好用的打包工具,一个是pyinstaller,一个是py2exe。当时年轻的我还没有意识到,我即将为我的冲动付出时间的代价。
安装模块
- py2exe
因为我用的是python2.7,我一看py2exe名字里带有2,心想没错了,决定就是你了,于是我在命令行界面如狂风骤雨般地敲打出 pip install py2exe,黑色屏幕一阵闪动,跳出血红大字:你的版本太低,看不上你。原来py2exe只能在3.3版本或者更新的版本才能使用。遂放弃 - pyinstaller
照样是如狂风骤雨般地敲打出pip install pyinstaller,哈哈,一次成功。
pyinstaller微操指南
pyinstaller使用方法还挺简单,在命令行界面跳转到自己的脚本目录下,输入1
pyinstaller *.py
立马开始工作,很快,命令行显示生成成功。与此同时在此目录下出现了一个build文件夹,打开文件夹,出现以脚本命名的文件夹,点进去,有个exe文件,说时迟那时快,我的鼠标立马就点过去,一个黑框闪过,结果啥也没有???
正在我百思不得其解时,我发现一个warntemp.txt,点进去。哇,一堆错误——全是missing,pyinstaller这个也是神奇,就算失败了也能给你生成出来,佩服佩服。但是佩服归佩服,怎么解决呢?原来,pyinstaller有个参数-p 文件路径,输入了此路径,就可以解决找不到模块的问题了。1
2pyinstaller *.py -p E:\DevelopTools\Anaconda2\Lib\site-packages
#我这里模块路径是这个,大家灵活点找到python模块的文件夹
重新再来一遍,这一次,黑框闪过,成功运行。
pyinstaller 一般有几个参数 :
-w(不带命令行框)
-F(一整个文件,单EXE)
bug总是来得措手不及
我内心这个激动啊,好,我马上给我的小伙伴发一个,亮瞎他们的狗眼。我开开心心地将它挪到桌面,突然就不行了,
难道是我的心不灵,还是这个打包器太倔,只能指定位置运行?于是我又给他小心翼翼地放回原来的地方,也还是不行。那我重新生成总可以了吧,它出现在那里,似乎一切都没变过,但是,却他已经不再是他了,他死了,永远的死了。于是我只能动用重启大法,重启之后,一切都是新鲜的模样,什么都是新的,每一个电子都似乎焕发了新的生机。他也随着电子,一起睁开了眼,复制,翻译,是那么的行云流水。我的眼眶不禁开始湿润,我开始思考,究竟是什么,是那隐藏在幽暗电子空穴里涌动的bug,还是那冥冥中的天意,亦或者是我那摇摇欲坠,随风而去的发丝还没离去,让它不满意,发脾气,闹别扭?
我踏上了一条寻找答案的道路,我左手谷歌,右手百度,一下去stackoverflow寻经问道,一下去cnds广布英雄帖,走过一道道荒芜的答案,尝试每一种可能的解法,只为我的程序能够让小伙伴的眼亮瞎。这样的我难道就不受世人待见吗,我在黑夜里忍受这血丝遍布的瞳孔带给我的痛楚,我在黎明前悄悄打开我的屏幕享受我的孤独,我一次又一次,失败又失败,可是我,永不动摇。
我再一次打开warntemp.txt,里面还是存在着错误,我一个又一个的添加路径,一遍又一遍的输入指令,我感觉我的生命,一点一点归于死寂。
bug之死
苍天不负有心人,bug终能死我手。我用cmd打开我移动过的程序,里面赫然说着,有个模块跳出,哈哈,原来如此,原来是我的模块问题1
2
3
4
5
6
7def getCopyText():
wc.OpenClipboard()
copy_text = wc.GetClipboardData(win32con.CF_TEXT)
copy_text=copy_text.strip().replace("\r\n"," ").replace("\n"," ").replace("\r"," ")
wc.CloseClipboard()
return copy_text
#返会是否有新的复制数据
乍一看,问题无有,但是由于我们打开了剪切板,而windows的剪切板功能超级强大,它不仅能够复制文字,还能复制文档,程序,当我移动程序的时候,我实际上是将程序复制到了剪切板,此时这个模块就不能正常工作,就会抛出异常,我终于明白了问题所在,我复制一段文字,打开程序,完美运行,nice!
bug已死,黄天当立,我也要继续下一段代码的编写。程序附上
点击下载