最近一直在做一个python 工具,当所有的程序代码都完成后,只剩下最后一步,打包成.exe文件。一开始并不是很重视这块内容,毕竟代码部分已经完成,打包还不简单么?但是随着工作的进行,问题层出不穷,一环套一环,我才发现此事必有蹊跷。下面我将总结我遇到的几个问题并逐一写下我是如何解决的。1. 版本问题 2.库函数的调用 3. 传递参数问题
一. 版本问题
首先我们要保证一个事情,python环境一定要一致,我采用的spyder的python环境是3.6而windows下是2.7,这样,编包的时候会出现很多奇奇怪怪的问题,最典型的莫过于语言问题,2.7和3.6不能说是不同的两种语言,但是在个别的语法上,区别还是很大的,不说print()了,最要命的就是迭代了的next(),在写一个大程序的时候,万万是离不开迭代的,而这点的变动,使得我找了半天原因,明明在编译器可以顺利运行的程序,为啥在打包后就运行不了了呢。后来经过多方学习和查证,是环境的问题,只要保证版本一致,就行了。现在的python环境的配置还是很方便的。
二. 库函数问题
嗯。。。。在说这个问题的时候,我需要先喘一口气,毕竟每当我回想起库函数的问题的时候我都会想到那天被python和windows 统治的恐惧。说一下问题吧,python环境还是自带了很多库的,我们当打包的时候,也会自动的将库包含进去。但是、しかし、 but ,事事总有个例外。就拿xlrd这个库函数来说吧,这个库并不是python安装就会被自带的,需要我们去官网下载。这就导致了我们上一个问题,版本不兼容的问题,官网下载的最新的xlrd库很有可能不兼容2.7版本,而事实上也证明了这种想法。当然,也有一种独特的解决办法,在python lib文件夹内,找出xlrd库,手动添加到我们需要编译的工程文件夹内。嗯。。。我建议不要用这种坑爹的方法,毕竟只有在蛋疼到极致的时候才会用到这种方法,最简单的还是升级版本。
三. 传递参数问题
咳咳,容我喝杯水冷静下,从我遇到这个问题到解决,虽然只用了半天的时间,但是依然很紧张的,毕竟这就是最后一步了。因为汲取了以上两个问题的经验,我知道干啥都不能着急,我也时刻提醒自己“彦祖,你要淡定,你要淡定,万一做不出来被公司开了,还能去当模特演员啥的,不至于饿死。嗯。。。”我们都知道两个函数sys.argv 和 input(),在这里我建议大家使用sys.argv,原因显而易见,太灵活了有没有。你可以将传递的参数传给任意一个函数。但是(说到这里我已经开始厌恶但是这个词了),大家在打包的时候应该会遇到一个问题,就是编码的问题,initfsencoding: unable to load the file system codec,网上的一些做法是转换成utf - 8,我可以很负责人的告诉大家,这个锅utf不背。原因在于pyinstaller 这个打包工具上,往往python版本的升级是很快的,但是配合的一些工具pip pyinstaller 等,却跟不上节奏(python “带不动,带不动”)。这就需要我们升级所用的工具了。
就和大家分享这么多了,可能没有说什么特别实质上的东西,完全是在开发中的一些经验教训。希望可以给大家带来帮助