让我们稍微休息一下,来把我们目前写好的小程序打包成.exe文件。
python程序打包有一些方法,py2exe和pyinstaller。其中py2exe的安装比较方便,但是打包起来比较麻烦;而pyinstaller的安装很麻烦,不过打包时候很简单:它会自动分析你引用的包,把他们聚合在一起。比如打包之前的程序,py2exe打包完成后的文件有81M,并且不能在其他电脑上运行;而pyinstaller则只有27M,可以在xp系统下运行(我的是win8)。
让我们来尝试一下pyinstaller吧。
首先下载安装pywin32::
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20217/
注意要找到正确的文件。
然后我们要下载一个工具pip-Win,用以安装需求的包。
https://sites.google.com/site/pydatalog/python/pip-for-windows
下载运行后,pip-Win会自动安装自己需要的包,然后给出一个gui界面,类似这样:
在Command中输入:
venv -c -i pyi-env-name
这一步是建立一个虚拟环境。当这个安装成功后,不要着急关掉命令行,继续输入:
pip install PyInstaller
即可安装好pyInstaller。以后每次打包的时候,都要先翻出这个pip-Win_xx.exe来,然后在Command中输入
venv pyi-env-name
虚拟一个环境。
虚拟好环境后,手动进入python脚本所在的目录,具体方法是在命令行输入: cd d:\xxx\ ,如果目录不切换的话,先打一个 d:\,再cd到最终目录。
然后输入:pyinstaller main.py -F -w
其中-F是指打包成一整个文件,-w是指窗口文件,如果你是命令行程序就输入-c。
这样就可以把python脚本打包成文件了。不过打包之后我发现jpg格式的图片无法读取了。。。。待考。
抱着一定要让它work的心态,稍微修改一下读取jpg格式时的代码如下:
if not fileName.endsWith('.jpg'):
self.__picture_origin = QImage(unicode(fileName.toUtf8(), 'utf-8', 'ignore'))
else:
image = cv2.imread(unicode(fileName.toUtf8(), 'utf-8', 'ignore'))
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
self.__picture_origin = QImage(image.data, image.shape[1], image.shape[0], QtGui.QImage.Format_RGB888)
self.__picture_origin = self.__picture_origin.convertToFormat(QtGui.QImage.Format_ARGB32)
就可以正常读取了:
另外还有一处bug是保存图片的时候,主要是要对fileName进行utf8编码,照着open时候的写就可以了。本学期上完的时候会把所有的code打包开放下载,作为这个系列的结束。