暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

安装环境配置,以及如何编译exe可执行程序(下篇) - Python高手成长路(系列)(第1阶段)

好想学Python 2018-07-06
422

我是DJun(小丁),码龄18年,从事IT工作5年,踩过无数“语言”坑最后入坑Python,想通过公众号,把自己的成长经历与经验分享给朋友们。

同名酷安看看号“好想学Python”已开通,欢迎订阅。


本篇摘要

本篇主要介绍新手如何下载安装配置Python的开发环境,以及如何选择适应需要的Python版本,这里的“版本”并不是指2.x或者3.x的版本,而是跟实际应用(比如需要在XP上运行,比如有连接数据库的需求,等)切合的版本选择。

往期精选

>>> Python从哪里开始学好呢?

>>> 一道简单的程序题?

>>> 是你认识的列表、字典、元组、集合吗?(上篇) 

>>> 是你认识的列表、字典、元组、集合吗?(下篇) 

>>> 安装环境配置,以及如何编译exe可执行程序(上篇) 


上篇:( 直达链接 ) Python开发组件的安装(官网或Anaconda),Python IDE的安装(idlex或JetBrains PyCharm);

下篇:如何编译exe可执行程序,如何解决XP下选择Python版本的问题。


在上篇,我们提到如何下载安装配置不同版本的Python的开发环境,本下篇在此基础上讲讲如何把我们写好的Python程序编译、打包成exe,再分享发送给其他没有Python环境的朋友。

在此之前我们先讲一下,如何用pip安装我们需要的模块。

从官方库安装模块的操作很简单,我们先打开“cmd”(命令提示符),运行方式可以是Win+R键呼出“运行”窗口,然后输入cmd,回车。出现的黑底白字的窗口便是我们需要的“命令提示符”了。

有些模块在安装时会要求管理员权限。这里有一个“小妙招”,可以对已经打开的“命令提示符”窗口快速启动管理员身份的“命令提示符”窗口。方法是在任务栏上对它点击右键,然后在“命令提示符”这一项上再点击右键,点击“以管理员身份运行”,这时再出现的新的黑底白字的窗口,便是管理员身份的“命令提示符”了。此时可以留意到窗口左上角“命令提示符”几个字前面多了“管理员”三个字。

请千万留意:如果安装使用的是Anaconda,请从开始菜单里找到“Anaconda Prompt”(Anaconda命令提示符),点击直接打开,或者像上面提到的方式一样点击右键“以管理员身份运行”来打开,用这种方式能确保打开的是Anaconda下的Python环境,而不是本机可能安装的其他Python环境。

pip工具安装、更新、卸载模块操作方式非常简单。在上面以不同方式打开的“命令提示符”窗口中,都是同样的操作方式。

安装: pip install <模块名>

覆盖安装、更新到最新版本: pip install -U <模块名>

安装或降级到旧版本:pip install -U <模块名>==<版本号>

卸载:pip uninstall <模块名>

安装操作的演示会在接下来要讲的PyInstaller模块中进行。

如果要查找官网模块仓库中的模块,可以通过“pip search <模块关键词>”命令来查找,它会列出一个两列的清单,左列是模块名和当前版本号,右列是模块介绍,我们把左列中想要安装的模块名复制出来,再通过“pip install <模块名>”命令来安装,就可以了。

对Python版本和模块版本的选择,有一点特别需要留意。举例说明,假设我们现在要使用Oracle数据库客户端,配合cx_Oracle模块连接数据库,这时我们要先检查本机Oracle客户端是哪种版本,如果是32位的客户端,那Python、cx_Oracle模块都要安装32位的版本;如果是64位的客户端,那Python、cx_Oracle模块就都要安装64位的版本了。这里并不是看本机操作系统是32位还是64位的,需要根据具体应用来决定。

另外有一点需要留意的是,在安装诸如pycrypto等需要编译的模块时,如果本机是Windows,但没有安装对应Python版本的Visual Studio编译环境,pip会报错提示“error: Unable to find vcvarsall.bat”错误。此时安装Visual Studio编译工具,再重新执行pip安装命令,即可解决问题。

如果是使用Python 3.4版本,请安装Visual Studio 2010(可以下载到Express免费版,只装C++,默认安装即可);如果是使用3.5、3.6或更新版本,请安装Visual Studio 2015/2017(可以下载到Community社区免费版,注意勾选C++编译工具)。

如果不想安装庞大的Visual Studio进行模块编译,也可以先上这里看看有没有适合本机的已经事先针对Win平台编译好的模块安装包: http://www.lfd.uci.edu/~gohlke/pythonlibs/

在pythonlibs这里,先用浏览器搜索功能搜到需要安装的模块(如图例子Pymongo),找到后,先确定一下本机是用哪个版本,比如Python 3.4 64位版,就选择cp34m-win_amd64的项目。


文件下载下来后,还是在“命令提示符”窗口中执行安装命令。由于这里的“whl”文件是wheel模块支持的安装包文件,所以需要先安装wheel(同样的套路,执行“pip install wheel”来安装),然后对于上面安装Pymongo(下载的是 Python 3.4 64位 对应的安装包)的例子,执行“pip install pymongo-3.6.1-cp34-cp34m-win_amd64.whl”即可进行安装。


05

编译打包exe:PyInstaller


笔者先前测试过几款打包生成exe的模块,有cx_Freeze、py2exe等,综合因素来看,感觉其他几款都不及PyInstaller。我们这里重点介绍PyInstaller。这款工具模块对目前主流的第三方模块的打包支持很好,基本都是兼容的,打包的Python运行环境较小,支持UPX压缩,支持给程序加图标、描述信息等,也支持包含附加数据,支持手工排除不需要的模块(可以减小程序体积)。它同时是一款跨平台工具,也支持Linux、Mac平台。

安装PyInstaller的方式很简单,只需打开前面提到的“命令提示符”窗口,然后输入“pip install pyinstaller”回车,pip就会帮我们自动查找安装最适合当前环境的版本进行安装了。

请留意!如果是需要在XP下使用,请留意安装PyInstaller 3.2.1版本,测试到只有 Python 3.4 32位 + PyInstaller 3.2.1 的组合生成的exe程序,才能在XP下正常运行。在Python 3.4 32位 的环境下执行“pip install pyinstaller==3.2.1”即可安装3.2.1版的PyInstaller。

PyInstaller安装好了,那么怎么打包exe程序文件呢?其实只需要很简单的步骤,还是用上面提到的“命令提示符”窗口,输入命令“pyinstaller -F <主程序py文件名>”,它就能自动打包生成exe单文件啦。下面我们马上来实践一下。

笔者这里有一项多个py文件的项目作为例子。主程序是写在“PyDBMonitor.py”文件中。我们先看一下主程序入口是长什么样的。

这个项目使用bottle提供Web服务。主程序入口这里,运行时会在本机启动Web服务,端口8888。采用“ if __name__ == '__main__' ”这种Python认可的主程序入口的标准写法,PyInstaller就能准确识别主程序的入口,正确地帮我们编译打包。

接下来我们在项目目录下打开“命令提示符”。按住Shift,然后在文件管理器窗口空白处点击右键,选择“在此处打开命令窗口”(Win7/8.x),或“在此处打开Powershell窗口”(Win10默认)。这里依然是用普通的“命令提示符”继续作演示。

接下来进行激动人心的打包操作。输入“pyinstaller -F PyDBMonitor.py”回车,看看结果,如图所示。

此时PyInstaller自动帮我们对目录下的文件进行各种分析,如图所示,并且生成了一个“.spec”文件,修改这个文件可以作一些高级的调校。等整个过程走完整后,在工程目录下的dist文件夹中,就能看到生成好的exe文件了!双击它就能马上运行打包好项目程序了!

直接运行这个25MB左右的exe程序,发现相比微软开发工具生成的exe程序,这个的启动时间会稍微有些长。那我们回过头来讲一下,为什么PyInstaller的操作在这里是叫“编译打包”?

在项目目录下的build文件夹里面,我们可以找到打包过程中产生的中间文件。可以找到“Python Zip Application”(Python打包应用程序)类型的文件,后缀“.pyz”,这个是能被Python解释器直接运行的编译好的项目程序文件。也就是说,“编译”和“打包”其实是分开的操作,PyInstaller做的事情是先把我们的项目“编译”成“.pyz”文件,再把相关数据、精简的Python运行环境等等一起进行打包。实际上运行打包好的exe文件时,会先把上面提到的这些东西解包到系统临时目录,再进行真正的程序执行的操作。这一系列的动作,必然会比用Python解释器直接运行“.py”代码或者比原本就是用微软开发的exe程序要慢一些的,程序体积本身相比下也会更大。


那么把Python程序打包成exe的意义在哪里呢?实际应用里面,除去Web开发等一些一般并不需要打包的应用,当我们要把Python程序放到其他机子上运行时,在没有打包的情况下,如果其他机子没有配置跟我们在开发时一样的Python运行环境的话,是无法正确运行的。有些程序项目用Python来开发既方便又效率高,在依赖Python的时候,使用PyInstaller只需要简单的步骤,就可以畅快地解决这一问题。


希望本篇可以给感兴趣或者想要学习的朋友们带来帮助哈。 

有其他疑问也请在下方留言提出,会尽力解答~

点击下方“阅读原文”查看更多
文章转载自好想学Python,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论