Python跨平台应用软件开发实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 Python应用软件开发概述

本节首先通过介绍Python应用软件开发的发展变化,让读者了解Python应用软件开发的现状,然后通过对比应用软件开发的一般流程和工具化流程,让读者认识到开发工具的重要性。在本节中也将介绍如何搭建Python开发环境,并介绍几种主流打包应用软件的工具使用。

1.1.1 Python应用软件开发现状

Python语言最初是一种教学语言,它提供了高效的数据结构,也能简单有效地进行面向对象编程,成为多数平台上使用的脚本语言,随着版本的不断更新和语言新功能的添加,它才逐渐被用于独立项目的开发。与主流的C++、JAVA、Object C等应用软件开发编程语言相比,Python语言更多作为系统嵌入的脚本解决方案以增强项目的灵活性,或者单独作为脚本语言执行作业。

当前大量的应用软件开发,都需要包含界面的展示,从研发的技术选型角度考虑,一般应用软件的开发需要对相应的编程语言技术栈考察以下基本要素。

1)是否可满足平台需要:指定的平台上是否有成熟的运行方案。

2)是否具备工程化集成开发工具:提供对应用软件的项目搭建、文件管理、界面设计、调试发布等工程化的工具支撑。

3)是否需要完善的图形界面库:前端展现如果需要界面,是否有提供数量足够、视觉美观的界面逻辑控件支撑。

比如微软的Windows系统长期在全世界范围内都具有较高的占有率,该系统的Visual Studio开发工具作为应用软件开发领域使用最广泛的编程工具箱之一,其中包含了一款重要的开发工具——Visual C++,它基于C++语言和一套内置丰富界面控件的Windows框架类库MFC(见图1-1),通过可视化的工具链支撑,可以非常方便地进行Windows界面工程的搭建与设计实现,这也促成了Windows系统之上数量庞大的应用软件产品,同时奠定了C++语言作为桌面软件开发主要语言的地位。

MFC系统虽然强大,但是有一个弱点,即不可跨平台。在Windows系统占据主流个人计算机操作系统的很长一段时间内,这一点并不成为一个主要痛点,但部分行业对跨平台应用软件的需求是长期存在的,这时Qt作为一个跨平台C++图形用户界面应用程序开发框架就登上了历史舞台,它既可以开发GUI程序,也可以开发非GUI程序,采用面向对象的框架,同时提供了可视化界面设计工具Qt Creator(见图1-2),后经过多次企业收购和完善,目前已经逐步成为主流的跨平台应用软件的开发框架。

与C++语言相比,Java编程语言开发的产品具有安全性高、跨平台的特性,经过Sun和Oracle两家巨头公司的长期建设更加完善。虽然Java开发的应用软件在Windows操作系统上不如C++多,但在基于Linux操作系统的商用应用服务器和大型集成系统开发与嵌入式系统中占领霸主地位。Java内置AWT和Swing等GUI工具包,配合Eclipse(见图1-3)和IntelliJ IDEA等开发工具,也可方便地进行跨平台GUI应用软件开发。移动互联网时代之初,Google开发了安卓操作系统,同时以Java编程语言作为安卓应用软件的开发语言并推出Android Studio可视化开发工具,进而造就了丰富的安卓应用生态,进一步夯实了Java作为移动应用软件开发的首选开发语言。

●图1-1 MFC开发界面应用

●图1-2 Qt Creator

●图1-3 Eclipse中的WindowBuilder插件界面设计器

在个人消费电子领域,苹果公司的产品一直以来以优秀的体验和设计感得到了许多用户的长期青睐,特别是移动互联网时代,iPhone已经成为移动手机高端设备市场份额占有率较高的产品。这些设备对应用产品的需求广泛,苹果公司通过应用商店这个统一的应用发布平台,对苹果开发者进行扶持,并发布了专门针对苹果设备的应用开发语言Object C和与之配合的强大集成可视化开发工具XCode(见图1-4),基于Mac笔记本和其操作系统的良好图形界面和操作体验,成功促成大量开发者进入,持续建设起了一个巨大的应用开发生态。

当然,除了上面几种主流的应用开发编程语言之外,在计算机和移动应用开发领域,各种新的语言和开发工具也层出不穷,比如使用JavaScript、HTML和CSS构建跨平台桌面应用的Electron(见图1-5)以及可以帮助开发者通过一套代码库高效构建多平台精美应用并支持移动、Web、桌面和嵌入式平台的Google开源用户界面工具包Flutter等。

面对这么多强大的编程语言和开发工具,Python作为一种很早就诞生的编程语言,长期以来给人的印象就是作为短小灵活的脚本语言来执行,而不太会用来开发复杂的界面应用项目,所以也就没有很多与之配套的工具软件来辅助项目搭建和界面设计,从而限制了Python在桌面应用和移动应用方面的开发。

现在这个矛盾正越来越突出,具体表现如下。

1)Python缺少一款易用的全流程可视化集成开发工具,开发者无法快速搭建桌面应用框架,只能手写各界面布局和逻辑实现以及打包命令,这相比于现在主流的开发语言,开发和维护成本都太大。

2)Python内置的界面库tkinter比较简单,不够美观和多样化,无法很好地满足当今用户需要,而学习PyQt对于广大的Python开发者而言,又门槛略高。

3)Python的应用打包比较烦琐,包体较大,而移动端打包尚不成熟,无法方便地打包移动应用。

●图1-4 通过XCode中的InterfaceBuilder构建界面

●图1-5 Electron官网介绍

在可视化集成开发工具方面,虽然目前来说,使用Python开发应用程序仍存在一些不便,但这种现状正在得到改变。PyMe初步建立起了一套完整易用的开发流程。相较于Qt Creator和其他一些Python界面项目解决方案,PyMe可以帮助开发者非常方便地创建项目,并对项目开发过程中的界面设计、逻辑处理、调试打包、皮肤美化进行全方位把控,极大地提升了项目开发效率,更可提供移动应用打包的能力(见图1-6)。

●图1-6 使用PyMe设计的PDF文件处理工具

越来越多的三方界面库的出现,也使得Python应用界面的观感得到大幅改善,比如ttkbootstrap(见图1-7)。

●图1-7 ttkbootstrap的界面样式示例

在移动开发领域,Kivy(见图1-8)和BeeWare(见图1-9)两种针对移动设备应用开发框架的出现,也为Python进行移动设备应用开发提供了支持。目前来看,虽然它们还不够完善,但也在快速的发展中,未来或许可以实现良好的可用性。

●图1-8 Kivy支持的操作系统

●图1-9 BeeWare的介绍

随着Python开发者的持续增加,一定会出现越来越多的优秀工具来完善Python开发桌面和移动应用的功能,这是发展的必然。

1.1.2 Python开发环境与工具

在进行Python开发前,首先要保证当前的计算机上已经安装有Python的开发环境。一般来说,Python的安装有两种方式。

1)通过Python安装包安装:从Python安装包里安装,只包括Python的运行环境和基本库。

2)通过虚拟环境Anaconda安装:这是一个开源的包环境管理器,包括Python和NumPy等180多个科学包和依赖项,这样可以直接使用一整套已经安装好的开发环境,Anaconda也可以在当前操作系统内保持多个不同版本的环境并相互隔离,比较方便开发者在多个Python版本环境中切换。

由于网上拥有非常多的安装教程,大多数开发者在学习Python应用开发之前已经掌握了Python的下载安装方法,这里不再赘述。把Python安装好后,接下来可以选一款自己喜欢的文本编辑器来辅助进行代码的编写和调试,Visual Studio Code(简称VSCode)、Sublime Text、PyCharm是3种主流的代码编辑器软件(见图1-10)。

VSCode是一款由微软开发的跨平台免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装扩展以拓展软件功能。内置了对多种语言(如C++、C#、Java、Python、PHP、Go)的支持和运行时扩展的生态系统。开发者可以通过官网(https://code.visualstudio.com)找到所用操作系统的版本进行下载。

●图1-10 3种主流的Python开发工具

Sublime Text是一款由程序员Jon Skinner于2008年1月开发的个人文本编辑器,它最初被设计为一个具有丰富扩展功能的Vim,具有体积小、启动快、运行快的特点,还有方便的配色及兼容Vim快捷键等优点,博得了许多程序员的喜爱,感兴趣的开发者可以通过官网(https://www.sublimetext.cn.com)找到所用操作系统的版本进行下载。

PyCharm是一个专业的Python集成开发工具,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,用于支持Django框架下的专业Web开发。在规模较大的Python项目上,PyCharm具有很好地口碑。一般个人开发者可以使用其免费的社区版进行项目开发。如果使用专业版则要支付一定费用。官方下载网址:https://www.jetbrains.com/zh-cn/pycharm/download。

1.1.3 Python应用软件的打包与发布

完成了项目的开发后,一般需要交付给用户一个可执行程序,这时就需要使用一些打包库将项目打包成相应操作系统的可执行程序,作为一个独立的应用软件发布,这样用户就可以不用再安装Python而直接运行。

常用的第三方打包库有cx-freeze、PyInstaller、Nuitka。在这里使用一个简单的helloworld程序来演示其打包用法。

首先创建一个文件“helloworld.py”:

1.使用cx-freeze生成可执行程序

具体的用法如下。

1)使用pip安装cx-freeze。

2)在命令窗口继续输入以下命令。

其中helloworld.py是需要编译的程序文件,dist是目标文件夹,打包完后会成为dist文件夹,并将生成的可执行文件放在这里。

执行后可以看到以下输出(见图1-11)。

●图1-11 cx-freeze打包输出的文件列表

2.使用PyInstaller生成可执行程序

PyInstaller是一个简单又十分强大的打包工具,也是目前广泛使用的打包方式之一。

1)首先使用pip安装PyInstaller。

2)通过运行命令对Python文件进行打包。

使用PyInstaller打包,可以选择两种方式:打包为文件夹和单文件。打包为文件夹会将生成的可执行文件和所需要的所有库都放在一个文件夹里面,而打包为单文件则只会生成一个独立的可执行文件,所有需要的库都被一并打包进可执行文件内部,所以这种方式打包出的可执行文件容量相较于文件夹方式会大许多。

文件夹模式为默认打包模式,直接执行命令:

打包完成后,会成生一个helloworld的目标文件夹。

单文件打包需要加上-F参数:

除了-F参数外,PyInstaller还提供了其他参数(见表1-1)。

表1-1 PyInstaller的打包参数列表

(续)

在使用PyInstaller进行单文件程序打包时,如果希望可执行程序的体积尽量小,可以考虑使用UPX压缩工具来压缩,UPX的官网地址为:https://upx.github.io/通过首页可以进入github的对应页面:https://github.com/upx/upx/releases/tag/v4.0.2。

选择合适的版本下载后,在打包时通过-upx-dir来设定PyInstaller,打包时使用UPX进行压缩就可以了。

完成打包后,可以在当前工程目录下看到两个生成的目录build和dist,其中build为构建程序所生成的临时文件,dist为目标执行程序和相关库所在的文件目录(见图1-12)。

●图1-12 PyInstaller打包输出的文件列表

3.使用Nuitka生成可执行程序

Nuitka是一个可以将Python代码转换为C代码再进行编译的工具,它与其他几个打包工具不同之处在于需要下载C编译器,通过C编译器对项目主要的Python逻辑代码进行编译,并通过一个动态链接库来执行第三方包里的Python代码。通过这样的方式,Nuitka打出的包运行速度快,且exe包体较小,也更加安全

1)下载C编译器(MinGW-w64、GCC等)并将执行程序路径加入当前操作系统的PATH。

以MinGW-w64为例,下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/。

如果是Windows系统,根据情况选择下面的MinGW-w64 GCC-8.1.0(见图1-13)。

●图1-13 MinGW-w64下载页面

下面有8个链接,分别使用不同的关键字组成。前缀x86_64代表适用于Win64操作系统,i686代表适用于Win32操作系统。中间的posix和win32分别代表线程模式,posix适用于Linux和macOS,而Win32适用于Windows系列操作系统。扩展名sjlj、dwarf、seh分别为3种不同的异常处理模式。sjlj全称为SetJump/LongJump,前者设还原点,后者跳到还原点,既可用于Win32操作系统,也可用于Win64操作系统。dwarf只可用于Win32操作系统,需要整个调用堆栈被启动,主要用于系统DLL,seh只可用于Win64操作系统,利用了FS段寄存器,将还原点压入栈,收到异常时再弹出,性能比sjlj快。

如果是使用Win64操作系统,单击x86_64_win32-seh这个链接就可以了(见图1-14)。

单击下载并解压到合适的目录后,在当前系统的高级系统设置-环境变量中将当前目录下的bin目录加入系统变量的PATH变量中(见图1-15)。

设置好后通过命令行输入:

●图1-14 正在下载中的MinGW-w64

●图1-15 环境变量的设置

如果能看到这3个工具的信息,就说明安装设置就成功了(见图1-16)。

●图1-16 运行gcc等命令的输出结果

2)安装Nuitka。

通过执行命令pip install nuitka执行安装。

3)使用nuitka命令进行Python代码的代包。

在命令行窗口执行nuitka "helloworld.py"即可进行打包。

Nuitka打包参数较多,表1-2列出了一些主要的参数及说明。

表1-2 Nuitka的打包参数列表

(续)

打包完成后在当前目录下会生成对应的可执行程序和一个用于启动可执行程序的批处理文件(见图1-17),如果报错找不到一些暂时无法转成C++的第三方包,则要考虑保留这部分仍然为Python文件,需要将这些包(一般在Python安装目录的Lib\ site-packages下)复制到生成的dist目录中,并设置不对其进行编译。

●图1-17 Nuitka打包完成后生成的文件列表