返回介绍

大型项目的开发工具

发布于 2024-01-29 22:24:14 字数 3670 浏览 0 评论 0 收藏 0

一旦精通了Python基础知识,就会发现Python程序变得比你至今体验过的例子还要大。对于开发大型系统而言,Python和公开领域有一批开发工具可以使用。你已看过其中几种工具的用法,而且本书也提过一些。为了帮助你开始编程,以下是此领域中一些最常用的工具摘要。

PyDoc和文档字符串

PyDoc的help函数和HTML界面在第15章介绍过。PyDoc为模块和对象提供了一个文档系统,并整合了Python的文档字符串功能。这是Python系统的标准部分,参考库手册以获得更多细节。请确认返回查看了第4章所列举的文档资源的提示,以了解其他Python资源的信息。

PyChecker和Pylint

因为Python是的一门动态语言,所以有些程序设计的错误在程序运行前不会报错(例如,当文件执行或导入时,语法错误会被捕捉)。这不是什么大的缺点:就像大多数语言一样,这只是代表把产品传送给客户前,需要测试你的Python程序。此外,Python的动态本质、自动出错消息以及异常模型,使你很容易在Python中寻找和修正错误,远胜过其他语言(例如,和C不同的是,Python不会因错误而崩溃)。

PyChecker和PyLint系统可以在脚本运行前把大量的常见错误预先缓存起来。这和C开发领域中的"lint"程序扮演了类似的角色。有些Python社区会在测试或者分发给客户前,先用PyChecker执行其代码,来捕捉任何潜在的问题。事实上,Python标准库在发布前都会定期用PyChecker执行。PyChecker和PyLint是第三方开源代码包。你可以在http://www.python.org或者PyPI网站上找到它们,或者通过常用的Web搜索引擎来查找。

PyUnit(也就是unittest)

在第24章中,我们看过如何在文件末尾使用__name__=='__main__'技巧,把自我测试代码加到Python文件中。就更高级的测试目的而言,Python有两个测试辅助工具。第一个是PyUnit(在库手册中称为unittest),提供了一个面现对象的类框架,来定义和定制测试案例以及预期的结果。这是模拟Java的JUnit框架的。这是个精致的类系统。更多细节请参考Python库手册。

doctest

doctest标准库模块,提供第二个并且更为简单的做法来进行回归测试。这是基于Python的文档字符串功能的。概括地讲,要使用doctest时,把交互模式测试会话的记录复制粘贴到源代码文件中的文档字符串中。然后,doctest会抽取出你的文档字符串,分解出测试案例和结果,然后重新执行测试,并验证预期的结果。doctest的操作可以用多种方式剪裁。更多细节请参考库手册。

IDE

我们在第3章讨论过Python的IDE。例如IDLE这类IDE,提供了图形环境,来编辑、运行、调试以及浏览Python程序。有些高级的IDE(例如,Eclipse、Komodo、NetBeans和Wing IDE)支持其他的开发任务,包括源代码控制整合、GUI交互构建工具和项目文件等。参考第3章、http://www.python.org中text editor的网页以及你爱用的Web搜索引擎,找到有关Python可用的IDE和GUI构建工具。

配置工具

因为Python是高级和动态的,所以从其他语言学习得到的直接经验,通常不适用于Python代码。为了真正把代码中的性能瓶颈隔离出来,需要通过time或timeit模块内的时钟工具新增计时逻辑,或者在profile模块下运行代码。在第20章比较迭代工具的速度时,我们看过time模块的用法。配置通常是你优化的第一步——通过配置隔离瓶颈,然后对它们的替代编码计时。

profile是标准库模块,为Python实现源代码配置工具。它会运行你所提供的代码的字符串(例如,脚本文件导入,或者对函数的调用)。在默认情况下,它会打印报告到标准输出流,从而给出性能的统计结果:每个函数的调用次数、每个函数所花时间等。

profile模块可以作为一个脚本运行或导入,并且可以以多种方式进行定制。例如,可以把统计资料保存到文件中,稍后使用pstats模块进行分析。要交互地进行配置,导入profile模块并调用profile.run('code'),把想要配置的代码作为一个字符串传入(例如,对函数的一次调用,或者对整个文件的导入)。要从一个系统shell命令行配置,使用一条形式为python-m profile main.py args(参见附录A了解这一格式的更多内容)的命令。请参阅Python的标准库手册来了解其他的配置选项;例如,cProfile模块,拥有与profile相同的接口,但是运行起来负载较少,因此,它可能更适合于配置长时间运行的程序。

调试器

我们已经在第3章讨论过调试选项(参见本书第3章中的边栏“调试Python代码”)。作为一个回顾,Python的大多数开发IDE都支持基于GUI的调试,并且Python标准库包含了一个命令行源代码调试器模块,称为pdb。这个模块提供了与常用的C语言的调试器(例如,dbx、gdb)工作非常类似的一个命令行界面。

和配置器很相似,pdb调试器可以交互地运行,或者从一个命令行运行,并且可以从一个Python程序导入并调用。要交互地使用它,导入这个模块,调用pdb函数开始执行代码[例如,pdb.run("main()")],然后在交互模式提示符下输入调试命令。要从一个系统shell命令行启动pdb,使用形式为python-m pdb main.py args...(参见附录A了解这一形式的更多内容)的一条命令。pdb包括了实用的事后分析调用,即pdb.pm(),它可在遇到异常后启动调试器。

因为IDLE这类IDE包括“指针并点击”的调试界面,pdb其实现在很少有人使用。参考第3章有关使用IDLE的调试GUI接口的技巧。实际上,pdb和IDE在实际中用的不是很多——正如本书第3章所提到的,很多程序员插入print语句或者直接读取Python的出错消息(不是最高端的方法,但是,在当今的Python世界中,往往是最实用的方法能够胜出)。

发布的选择

在第2章中,我们介绍打包Python程序的常见工具。py2exe、PyInstaller以及freeze都可打包字节码以及Python虚拟机,从而成为“冻结二进制”的独立的可执行文件,也就是不需要目标机器上有安装Python,完全可以隐藏系统的代码。此外,我们在第2章学过,当Python程序分发给客户时,可以采用源代码的形式(.py)或字节码的形式(.pyc),此外,导入钩子支持特殊的打包技术,例如,zip文件自动解压缩以及字节码加密。我们也简单谈过标准库的distutils模块,为Python模块和套件以及C编写而成的扩展工具提供了各种打包选项,更多细节请参考Python手册。后起之秀Python eggs打包系统提供另一种做法,也可解决包的相互依性,更多细节请在互联网上搜索。

优化选项

优化程序时,第2章所提到的Psyco系统提供了实时的编译器,可以把Python字节码翻译成二进制机码,而Shedskin提供了Python对C++的翻译器。偶尔会看见.pyo优化后的字节码文件,这是以-O Python命令标志位运行所产生的文件(第21章和第33章讨论过),这只提供了有限的性能提升,并不常用。最后,也可以把程序的一些部分改为用C这类编译型语言编写,从而提升程序性能,参考Programming Python以及Python标准手册来了解C扩展的更多细节。一般来说,Python的速度也会随时间不断改善,要尽可能升级到最新的版本。

对于大型项目的提示

我们在本书中遇过各种语言特性,当开始编写大型项目时,就会变得更有用。其中,模块包(第23章)、基于类的异常(第33章)、类的伪私有属性(第30章)、文档字符串(第15章)、模块路径配置文件(第21章)、从from*以及__all__列表到_X风格的变量名来隐藏变量名(第24章)、以__name__=='__main__'技巧来增加自我测试代码(第24章)和使用函数和模块的常见设计规则(第17章、第19章以及第24章),使用面向对象设计模式(第30章及其他),等等。

要学习公开场合的其他大型的Python开发工具,一定要去浏览位于http://www.python.org的PyPI网站的相关网页。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文