附录A.2. 模块及扩展库 《Python编辑基础及应用》
本书同名免费MOOC《Python编程基础及应用》在哔哩哔哩(B站)热播,作者带着你学。
附录A.2. 模块及扩展库
Python从诞生之日起,就提供扩展接口,鼓励参与者通过编写”库”来扩展其功能。这些第三方“库”既可以是Python编写的, 也可以是C语言编写的。Python作为一种胶水语言,可以很方便地与其它语言相互调用。
能使用C或者其它更高效的语言来扩展Python的事实极大地方便了程序员。对于那些对执行效率要求不高的部分,直接用Python写,以便事半功倍;对于那些对执行效率有苛刻要求的部分,比如自动驾驶系统里的图像识别:从画面中找出交通信号灯并识别红、绿和转向,就可以用C或者C++来高效实现。
为了展示将“开源”和“共享”进行到底的决心,Python书写的代码默认是没办法“保密”的。也就是说,你即使把Python“编译”成了pyc文件(一种由py文件经“编译”预处理后的文件格式),那些“有心”的软件使用者仍然可以不受约束地阅读和借鉴你的全部源代码。
作者目前只知道一种将Python代码“保密”的方法,那就是修改开源的Python解释器源代码,把其中的文件存储的部分改成“加密”的。这种做法在“开源”社区可能很不受欢迎。
A.2.1 Python扩展库
丰富的包/模块以及源源不断由开源社区的"雷锋"们制造的第三方扩展包/模块是Python广受欢迎的重要原因。现在作者试图用Python解决任何工程问题,决不是简单的"埋头苦干",而是先搜索一下有没有现成的库可以利用。这些库有的包括在标准的Python安装里,称为“标准库”,有的需要单独安装。无论是“标准的”还是“第三方的”库,都是对Python功能的扩展,统称扩展库。下表介绍了一些”重要”的Python扩展库。
名称 | 简介 |
---|---|
PyQt4/PyQt5 | Qt是一个历史悠久,广受赞誉的跨平台C++开发库及IDE。它可以非常容易地编写图形界面应用程序,甚至手机App。目前在用的有Qt4和Qt5两个版本。而PyQt4/PyQt5是对Qt的Python封装,通过它们,你可以使用Python来操作Qt的”C++身体”。本书的后半部分会有单独介绍使用PyQt制作图形界面应用程序的章节。 |
scipy | SciPy是个开源的免费Python库,其包含诸多模块以支持各种形式的科学和工程计算:优化、线性代数、积分、插值、FFT-快速傅里叶变换,信号和图像处理等。作者曾使用scipy.stats模块来进行某些健康人群生理指标的正态分布计算和估计。项目网址:www.scipy.org。 |
pyserial | 串口(包括虚拟串口)的Python语言接口。作者曾通过它让计算机与某些工业设备进行通信。 |
numpy | 用C语言编写的多维数组模块,能快速地创建和计算多维数组。它是scipy, matplotlib, opencv-python等模块的基础。 |
opencv-python | 提供OpenCV库的Python接口。OpenCV是一个主要针对实时计算机视觉的编程功能库,最初由英特尔开发。 该库是跨平台的,可以在开源BSD许可下使用。作者曾借助于OpenCV库来识别医疗监视图影像中的人眼瞳孔的位置和注视方向,以评估医疗对象在医学检查过程中的关注度。 |
cython | 提供一种使用C和Python的混合语言编写Python扩展库的方法。 |
configparser | 提供与设备的modbus通信协议支持。modbus是现代工业设备间常用的通信协议之一。读者家里的热水器或者中央空调如果有远程控制终端的话,这些远程控制终端与主机之间,很可能就是modbus协议,而在通信的底层,又很可能是485或者RS-232串口协议。作者曾用该模块让工业机器人与某种外部运动控制器进行交互。 |
tkinter | Python标准安装中自带的GUI工具包。帮助用户创建图形用户界面(Graphics User Interface)的应用程序。 |
ReportLab | 一种用于绘图和生成PDF文档的开源软件包。 |
pygame | 一个跨平台的Python游戏开发包。年幼的初学者或者童心未泯的大同学可以尝试用pygame开发一个街机游戏。这个包里还自带一些图像和音频库供学习者使用。 |
matplotlib | matplotlib是一个可绘制印刷级质量图表的跨平台2D/3D库,可以方便地从数据生成并绘制折线图、直方图、饼图和其它各种专业图表。 |
django,flask,pyramid | 这三者都是基于Python的Web框架,简单地理解就是用于构建Web网站的。如果读者期望开发小型的Web应用,使用这些框架是合适的。但作者不得不说,当前最主流的Web前端框架是基于JavaScript的Bootstrap、Vue、React之类;而最主流的Web后端框架则是基于Java的SpringFramework。如果读者想学习构建专业的大型Web应用,至少目前,还是应该考虑由JavaScript、Java、HTML5、CSS3等构成的宠大的阵营。 |
pandas | Python Data Analysis Library - pandas最初是作为金融数据分析工具被开发出来的,它基于numpy。现在已经成为使用Python进行数据分析的主流工具。 |
Python扩展库的使用者如果试图将软件商业化, 则需要注意相关扩展库的授权协议,常见的协议有:BSD, Apache,GPL, LGPL, MIT等等。这些协议描述了扩展库的拥有者对你的授权:是否可以商业化? 是否必须开源?简单地说,BSD几乎不对使用者进行任何限制,而GPL则要求任何基于GPL开源代码的衍生软件也必须开源。遵重原作者的权利,是每个人的义务。在可能的情况下,尽可能开源和共享,是作者对读者的期待。
A.2.2 了解模块
使用一个模块(module)前必须先了解这个模块。除了网上检索,阅读其官网上提供的文档外,Python解释器还提供了一些简便的方法。说明一下,本节中的代码在Python控制台中直接执行或更为简