Python程序打包为exe可执行文件

这是Python学习笔记系列的第五篇。

点击一下关键词查看往期学习笔记:

全文约6000字,阅读约需9分钟

一、引言

函数式编程是提高效率的好办法,因为把一些需要重复执行的代码进行了封装,以后可以重复调用。此外,函数式编程也有助于形成自顶向下的设计思维。打包成exe可执行文件主要是使程序能够在非python环境下也能得到执行,便于程序的分享使用。

二、turtle库:画图

turtle是python自带的标准库,不需要额外安装,可直接import turtle使用。这里以turtle画图作例子,演示函数式编程与打包。

在画图之前,需要了解这个画布呈现的方式。

画布就是一个小窗口,在调用turtle的时候作为画图呈现的平台。在画图中,无论是设置画布的位置大小,还是画图中使用到的画笔,都要使用像素作为单位。画图的第一步就是设置画布的位置。如上图,画布这个小窗口的定位和大小主要利用了四个字参数,startx、starty、width和height。后两者就是画布的宽度和长度,前两者是画布左上角顶点距离屏幕左边和屏幕顶部的距离。

为了准确定位画布,我们需要知道屏幕的width和height。值得注意的是,在程序中屏幕分辨率并不一定是屏幕设置中的参数,显示设置1920*1080的屏幕在这里并不一定就是这一分辨率。因此需要检测。

这里需要调用win32api检测,需要安装pywin32包。(在cmd中执行pip install pywin32)

然后输入:

(注:文中代码界面均可左右移动)

在输出界面可以看到当前屏幕的分辨率:

因此,尽管是1920*1080的屏幕。但是在这里像素只有1280*720。

根据这一分辨率,就可以设置画布了:

这里将画布设置成640*360,长度宽度各取屏幕一般,然后通过换算使得画布显示在屏幕正中央。画布中,画笔的默认初始状态是这样的:

画笔朝向:右

画笔位置:(0,0)

在画布中,又有一套自己的坐标系,以中心为(0,0)点,右边为正x轴,上方为正y轴。一切效果都是这个画笔实现的,随着画笔的轨迹变动,相应的图画也就产生了。

三、函数式编程: def

对于一些重复性的东西,完全可以用函数封装起来,只需要输入参数,就可以返回对应的结果,这样就可以极大的提高开发效率。在Python中,一个个标准库和第三方库就是大型的函数集合。

比如我要让画笔画出字母“C”,我可以用函数封装起来,只要调用这个函数,输入参数,就能让画笔画出对应的字母,在需要绘画大量字母的时候就省去了每次都要重新编程的冗余工作。

编写函数最重要的就是标准化,并且适应性要强。在不同的场景中,我肯定需要不同大小的字母“C”,那么就要设定参数使得字母“C”可以根据输入的参数变化大小。为了标准化,可以将字母C放置在一个矩形里面,类似于:

统一设定画笔在左下角,朝向右边,以此为起点进行绘制,绘制完毕后回到该点,朝向不变。C可以用半圆表示,为了控制其大小,可以将高度设定为参数x,一切距离用这个x表示,那么整个字母大小就可以等比例控制而不会变形。这里的思路为:

抬起画笔(不留轨迹)——前进0.5x——放下画笔(开始有轨迹)——在该点顺时针画半圆——抬起画笔——顺着轨迹回到0.5x点——返回原点——放下画笔(使画笔回到初始状态)

这样一来,画笔从开始到绘制结束,这个函数调用以后仍然保持了初始状态,可以很好的与下一步进行对接,提高效率。否则,下一个函数调用还要把画笔调整到对应位置,十分麻烦。

对于这个操作,可以命名为C_Image(x=80)。设定的x=80是一个默认参数,如果不输入数字,将会默认为矩形高度为80像素。也可以输入其他数字从而改变字母C的大小。代码如下:

同理,可以设计N_Image(x=80)、I_Image(x=80)等等。

字母N:

字母I:

至于一些稍复杂的图形绘制,就纯粹是数学问题了。无非是计算出各个“路线”的长度,让画笔按照相应的路径进行绘制。

四、调用函数绘图:main()

封装好函数以后,需要一个主程序进行调用,构成最终绘图。这里可以设计一个main()函数对各个函数进行调用,构成最终图像。

由于在字母和字母之间经常需要不留轨迹地让画笔前进后退移动,这里就封装了两个函数right_move(x=40)和left_move(x=40),让画笔抬起——右移(左移)x距离——放下画笔,便于主函数这里挪动画笔位置。

主函数可以这样设计:

运行效果:

五、打包为exe可执行文件

重头戏来了。

这样一个程序,在安装python环境中执行也不太容易,比如用pycharm运行还需要设置运行名称,py文件地址,python解释器指定等等。用cmd运行还得打开cmd命令,键入py文件地址等等,还要考虑python有没有放到环境变量里面。

要是能够打包成exe就好了,双击运行,只要是windows终端都可以。

pyinstaller包就提供了这么一种方法,可以把python程序打包成exe可执行文件,极大方便了程序的跨平台运行。

首先需要安装pywin32和pyinstaller包。可以在cmd中用以下命令安装:

安装好以后就可以用cmd键入命令打包文件。命令格式为:

回车后,

在运行这条命令的路径下面会生成两个文件夹,一个build是工程文件,可以删除,另一个dist文件夹下面就存放着需要的exe文件。也可以给程序添加图标等等,百度pyinstaller参数设置即可。

需要注意的是,文件路径要求比较高,路径中最好不要出现空格或者中文字符等特殊字符,否则可能会报错。

双击打开exe,会跳出cmd界面,会有一小会延迟,过一会就会开始自动执行。

这样以来,编写的python文件就可以在没有安装python环境的计算机中运行了。当然,需要注意的是这个打包程序应该只适用于比较简单的程序(比如这里的画图),如果涉及大量前端界面交互,或者需要调用较为复杂的接口等,可能无法实现一键打包。

上述python文件完整代码如下:

--End--

好看!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190131G0M6WJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券