程序员学Python编程或许不知的十大提升工具

与其他大多数编程语言一样,Python拥有强大的第三方支持,它们提供了各种各样的工具。这些工具在创建应用程序的过程中能够大大增强Python的功能。调试器是一种工具,因为它是一种实用程序,而库不是,库是用来创建更好的应用程序的。

即使我们把工具和非工具(比如库)区分开,也不能让工具的数量明显减少。Python有大量常规工具和特殊工具的支持,这些工具被分成以下13类:

  • 自动化重构工具;

  • Bug跟踪工具;

  • 配置和构建工具;

  • 部署工具;

  • 文档工具;

  • 集成开发环境;

  • Python调试器;

  • Python编辑器;

  • Python Shell;

  • Skeleton Builder工具;

  • 测试软件;

  • 有用模块;

  • 版本控制。

值得注意的是,Python DevelopmentTools页面上的列表是不完整的。除此之外,你还可以在其他一些网页中看到大量的Python工具。

今天异步君挑选了几个需要特别关注的工具进行讲解。如果你对Python工具的内容感兴趣,你可以自己去网上查找一些其他工具学习一番。你可能会发现,有些自己想创建的工具其实早就有了,而且不止一种。

1 使用Roundup Issue Tracker跟踪Bug

现在有很多bug跟踪站点可供我们使用,比如:Github、Google Code、BitBucket、Launchpad。不过,这些公共站点用起来通常都没有你自己定制的本地化Bug跟踪软件那样方便。你可以在本地机器上选用多种跟踪系统,但是Roundup Issue跟踪器是其中更好的一个。Roundup可以运行在所有支持Python的平台下,提供了如下基本功能:

  • Bug跟踪;

  • 管理TODO列表。

如果你愿意在安装上多下点功夫,你就可以获得更多的功能,这些额外功能体现的正是Roundup和其他产品不同的地方。但是,要获取这些功能,你可能需要安装其他产品,比如数据库管理系统(DBMS)。Roundup的产品说明中指出了你要安装什么以及它和哪些第三方产品是兼容的。安装完成后,你会获得如下这些功能。

  • 客户支持,包含如下:

  • 电话应答向导;

  • 网络链接;

  • 系统和开发问题跟踪工具。

  • 互联网工程任务组(Internet Engineering Task Force,IETF)的问题管理。

  • 销售趋势跟踪。

  • 会议论文投稿。

  • 双盲评审管理。

  • 博客(目前还很简陋,以后会变得很强大)。

2 使用VirtualEnv创建虚拟环境

创建虚拟环境的理由很多,但主要原因还是为了创造一个安全、已知的测试环境。每次都使用相同的测试环境,这样可以保证应用程序拥有稳定的测试环境,直到你在类似产品的环境中完成足够的测试。VirtualEnv为我们提供了创建虚拟Python环境的方法,你可以使用它进行早期测试,或者诊断由环境原因引发的问题。请务必记住,你最少需要做3个标准级别的测试。

  • Bug:检查程序中的错误。

  • 性能:验证程序是否满足运行速度、可靠性、安全性方面的要求。

  • 可用性:验证程序是否符合用户需求,是否能够按照用户期望的方式响应用户输入。

根据大多数Python应用程序的使用方式,Python应用程序在实际工作环境中通常不需要运行在虚拟环境下。大多数Python应用程序都需要访问外部环境,但虚拟环境会阻止这种外部访问行为。

永远不要在生产服务器上测试程序

一些开发人员常犯的一个错误是在生产服务器上测试尚未发布的程序,这使得用户可以很容易地访问到它。永远不要在生产服务器上测试你的程序,原因有很多,其中最重要的一个是这样做会导致数据丢失。如果允许用户访问尚未正式发布的程序,而这个程序又包含可能会损坏数据库或其他数据源的Bug,这样就有可能造成数据的永久丢失或损坏。

你还要注意,你只有一次赢得别人好感的机会。许多软件项目的失败是因为用户最终抛弃了它。即便应用程序是完整的,但是没有人会使用它,因为用户认为应用程序在某些方面存在缺陷。用户心中只有一个目标,那就是尽快完成工作,然后回家。当用户发现某个程序在浪费他们的时间时,他们就不会再使用它了。

此外,未发布的应用程序有可能存在安全漏洞,心怀恶意的人可能利用这些漏洞非法访问你的网络。如果你的门是开着的,任何人都能进来,那不管你的安全软件有多棒都没什么用。当他们进来之后,你再想摆脱他们几乎是不可能的,即使你真的摆脱了他们,但这时对数据的损害已经发生了。从安全漏洞恢复是很难的,有时甚至是不可能的。简而言之,永远不要在生产服务器上测试你的应用程序,这样做的成本太高了。

3 使用PyInstaller安装你的应用程序

一般,用户都不希望在应用程序安装上花费太多时间,不管这个程序最终会给他们带去多大的帮助都是如此。即使你可以让用户去尝试安装程序,但不太懂计算机的用户也有可能会安装失败。简而言之,你需要有一种万无一失的方法,帮助用户把程序顺利地安装到自己的计算机中。PyInstaller 可以帮你做到这一点,它会为你的应用程序生成了一个安装包,用户使用这个安装包就可以很容易地把程序安装到自己的系统中。

幸运的是,PyInstaller可以在所有支持Python的平台上工作,所以你只需要一个工具就可以满足所有安装需求。另外,必要时,你还可以获得特定平台的支持。例如,在Windows平台下,你可以创建有代码签名的可执行文件。Mac开发人员很喜欢PyInstaller为bundle提供了支持。大多数情况下,尽量避免使用特定于平台的特性,除非你真的需要它们。当你使用了特定于某个平台的特性时,安装只能在这个平台上才能成功。

不要使用孤立的工具

网络上有一些Python工具是孤立的,其开发者已不再支持它们。但有些开发人员仍然在使用这些工具,因为他们喜欢这些工具所支持的特性或工作方式。但是,这样做是有风险的,因为你不能确定这个工具是否能和最新版本的Python协同工作。选择工具时,要尽量选择那些受生产厂商完全支持的工具。

如果你必须使用孤立的工具(例如做某个工作时只有孤立的工具可用),那请你确保所用的工具仍然有良好的社区支持。或许工具的生产商已经不再存在了,但至少在你需要支持时,有社区为你提供有用的信息。请注意,使用那些不受支持的工具可能会浪费你大量的时间,因为它们可能无法正常工作了。 |

我们在网上找到的许多安装工具都是特定于某个平台的。例如,当你寻找一款用于创建可执行文件的安装工具时,你需要注意这个工具创建出的可执行文件是不是特定于某个平台的(至少在你指定的平台上可以运行)。重要的是,你选用的安装工具在任何地方都能正常工作,这样就不会创建出用户无法使用的安装包。如果安装包有问题,那不管你选用什么样的跨平台语言都无济于事。

4 使用pdoc创建开发人员文档

与应用程序有关的文档有两种:用户文档和开发人员文档。用户文档介绍如何使用应用程序,而开发人员文档则描述应用程序如何工作。库只需要一种文档,即开发者文档,而桌面应用程序则只需要用户文档。但是,服务可能同时需要这两种文档,这取决于用户是谁以及服务如何组合在一起。大多数文档可能都会影响到开发人员,而pdoc是一个创建它的简单解决方案。

pdoc实用工具使用你插入到代码中的文档字符串和注释来创建文档,其输出是文本文件或HTML文档。你还可以让pdoc以Web服务器的方式运行,这样人们可以直接在浏览器中查看文档。pdoc实际是epydoc的替代品,现在epydoc的发起人已经不再支持epydoc了。

什么是文档字符串?

文档字符串是一种特殊注释,使用三重引号括起,如下所示:

"""This is a docstring."""

你可以把文档字符串和一个对象关联起来,例如包、函数、类和方法。在Python中,你创建的任何代码对象都可以有一个文档字符串。文档字符串的目的是描述对象,因此要使用描述性的语句。

查看文档字符串最简单的方法是在对象名称之后使用doc()方法。比如,键入print(MyClass.doc())将显示MyClass的文档字符串。此外,你还可以使用帮助(比如help(MyClass))来访问文档字符串。好的文档字符串用来指出对象做什么,而非如何去做。

此外,第三方实用工具也可以使用文档字符串。借助于合适的实用工具,你可以为整个库编写文档,而不必亲自动手编写。你使用的实用工具会通过库中的文档字符串来创建文档。如此看来,即使文档字符串和注释有着不同的用途,但它们在Python代码中同样重要。

5 使用Komodo Edit编写程序代码

选择IDE时,主要看开发者的需求、技能水平以及要创建的应用程序类型。具体到某类应用程序的开发,有些IDE的确要比其他的好用。对开发新手来说,最好用的IDE当数Komodo Edit。你可以免费下载这个IDE,它包含了丰富的特性,让你获得比使用IDLE更好的编码体验。下面是Komodo Edit提供的一些功能:

  • 支持多种编程语言;

  • 关键字自动补全;

  • 缩进检查;

  • 项目支持,自动生成部分程序代码;

  • 良好支持。

但是,Komodo Edit和其他IDE有个明显的不同,那就是它提供了一个升级路径。当你发现Komodo Edit无法再满足你的需求时,你可以升级到Komodo IDE,Komodo IDE包含对许多专业级特性的支持,比如代码分析(检查应用程序速度的功能)和数据库浏览器(让数据库更易用)。

6 使用pydbgr调试程序

高端IDE(如Komodo IDE)都会带有完整的调试器,就连Komodo Edit也带有一个简单的调试器。但是,如果你选用的是体量更小、价格更便宜、功能更少的IDE,那你可能根本就看不到有调试器存在。调试器可以帮你找出程序中的错误并修复它们。调试器越好,查找和修复错误所需要的工作量就越少。如果你使用的代码编辑器不带调试器,那你一定要找个外部调试器使用,比如pydbgr。

一款好的调试器包含许多标准特性,比如代码着色(使用颜色来表示关键字之类的内容)。除此之外,不同调试器各自还有一些非标准特性,这使它们彼此不同。下面是pydbgr的一些标准和非标准特性,如果你用的代码编辑器没有附带调试器,pydbgr会是一个不错的选择。

  • 智能求值:求值命令帮助我们了解执行某行代码时会发生什么,当然指的是这行代码在程序中实际运行之前。它有助于我们进行假设分析,用以了解程序中有哪些地方可能会出现问题。

  • 跨进程调试:一般来说,我们只能调试驻留在同一台机器上的应用程序。实际上,调试器是应用程序进程的一部分,这意味着调试器本身可能会妨碍到调试过程。为此,我们可以使用跨进程调试,这样调试器就不会影响到应用程序,你甚至可以不必在与调试器相同的机器上运行应用程序。

  • 全面字节码检查:有时,查看代码转换为字节代码(Python解释器真正理解的代码)的过程有助于我们解决棘手的问题。

  • 事件过滤和跟踪:当你的程序在调试器中运行时,它会产生一些事件,这些事件可以帮助调试器了解发生了什么。比如,移动到下一行代码会产生一个事件,从函数调用返回会产生另一个事件,等等。借助这个功能,我们可以控制调试器如何跟踪应用程序以及对哪些事件做出反应。

7 使用IPython进入交互环境

Python Shell可以很好地应用在许多交互任务中。但是,如果你使用过它,你可能已经发现它有一些缺陷。其中,最大的缺陷是Python Shell是纯文本环境,你必须在其中键入命令来执行给定的任务。更高级一点的Shell,比如IPython,支持GUI界面,这使交互环境更友好,这样你就不必记忆各种古怪的命令了。

其实,IPython不仅仅是一个简单的Shell。它提供了一个环境,你可以在这个环境中以新的方式和Python进行交互,例如以图形方式显示你使用Python创建的公式的结果。此外,IPython还是一个容纳其他语言的前端。IPython应用程序向后台的真正的Shell发送命令,因此你可以使用其他语言的Shell,比如Julia和Haskell。(即使你从未听说过这些语言,也不必担心。)

IPython最令人兴奋的特性之一是它能够在并行计算环境下工作。一般Shell都是单线程的,这意味着什么并行计算都做不了,你甚至不能创建多线程环境。仅凭这个特性,IPython就值得你试一试。

8 使用PyUnit测试Python应用程序

某些时候,你需要测试一下自己的应用程序,以确保它们按照预期工作。测试时,你可以通过一次输入一个命令并验证结果来进行测试,或者将这个过程自动化。显然,自动化这个方法会更好,因为你可不想把所有时间都花在测试上,连回家吃饭的时间都没有了,而且手工测试非常非常慢(尤其是当你犯了错误时,这种情况肯定会发生)。PyUnit等工具极大地简化了单元测试(对单个特性进行的测试)过程。

PyUnit的优点是允许你创建真实的Python代码来执行测试。简单地说,你编写的脚本是另一个专门的程序,用于测试主应用程序是否有问题。

或许你会觉得脚本(非你专门编写的应用程序)中可能会有很多Bug。其实,测试脚本一般都设计得非常简单,这会大大减少脚本中的错误,并让脚本中的错误很容易被发现。即便如此,错误有时还是会出现。因此,当你无法找到应用程序中的问题时,你就的确需要检查一下脚本了。

9 使用Isort整理代码

整理代码看上去像是一件很小的事,但是如果你不注意这一点,你的代码很可能会变得乱糟糟的,尤其是当你没有把所有import语句按照字母顺序放到文件顶部时,代码看起来会更乱。在某些情况下,如果你的代码不够整洁,你就很难(并非不可能)弄清楚它到底怎么了。Isort实用程序只对import语句进行排序,并确保它们全部位于源代码文件的顶部,这看上去微不足道,但对你理解和修改源代码有很大的帮助。

有时只要了解某个特定模块需要哪些模块,就可以帮助我们快速找出潜在的问题。例如,你的系统中安装了某个老版本的模块,那了解应用程序都需要哪些模块就可以使查找那个模块的过程变得更容易。

此外,在把应用程序分发给用户时,了解应用程序需要哪些模块也很重要。只有用户的系统中安装了程序所需要的模块,才能确保程序按照预期运行。

10 使用Mercurial进行版本控制

你在学习本书的过程中创建的那些应用程序其实都不复杂。事实上,在你读完这本书并转向更高级的学习之后,你都不太可能需要版本控制。不过,当你进入一个有组织的开发环境中工作、实际开发满足用户需求的应用程序时,版本控制就变得非常重要。简单地说,版本控制就是跟踪发布到实际生产环境中的不同程序版本,并记录不同程序版本之间发生的变化。当你说你在使用MyApp 1.2时,你指的是MyApp应用程序的1.2版。为程序打版本标识很有意义,当程序修改了缺陷或进行了改进之后,版本标识能够让人们知道自己使用的是哪一个版本。

Python版本控制工具有很多种,其中比较有趣的工具是Mercurial。对于几乎所有可运行Python的平台,Mercurial都提供了相应版本,这样在更换平台时你就不必再担心无法使用Mercurial了。(对于你使用的平台,如果Mercurial没有提供相应的可执行文件,你可以从官方站点下载Mercurial源代码自己构建一个。)

与其他产品不同,Mercurial是免费的。即便你打算以后改用其他更高级的产品,你也可以从使用Mercurial管理一个或两个项目的过程中获得有用的经验。

源代码管理(SCM)是指把应用程序的各个版本存储在不同的地方,以便根据需要撤消或重做对源代码所做的修改。对许多人来说,源代码管理似乎是一项艰巨的任务。Mercurial环境相当友好,你可以在其中学习SCM。当你需要返回到程序的旧版本或修复新版本中出现的问题时,应用程序各个版本的源代码必须可用才行。

Mercurial最棒的地方在于它有一个很好的在线教程。学习SCM最好的方法是在你自己的机器上一步步地跟学,哪怕只是翻一翻这些材料也是很有用的。教程的第一部分是关于如何安装Mercurial的。然后,教程讲解如何创建存储库(存储应用程序各个版本的地方),并在创建应用程序代码时使用存储库。学完这个教程之后,你会对源代码控制的原理以及为什么版本控制是应用程序开发的一个重要部分有很好的了解。

本文摘自《从零开始学Python 第2版》

书名:《从零开始学Python(第2版)》

作者:[美] 约翰·保罗·穆勒(John Paul Mueller)

译者:武传海

编辑推荐:

  • “达人迷”是畅销美国近30年的经典图书品牌,经过亿万读者的检验。

本书面向零基础读者,巧用类比式描述,技术知识点轻松掌握;基于案例进行讲解,读者可轻松理解编程思维,并在配套代码中参透Python编程的技巧。本书囊括5项常见任务&2项高级任,助力快速掌握Python。

除此之外,书中还有一系列的Python周边小知识,教你更好地掌握Python,活学活用Python。

更多python书单推荐


《Python编程无师自通》

作者:[美] 科里•奥尔索夫(Cory Althoff)

在美国亚马逊,有一本书的影响力超高的Python入门书,Kindle版本在美国亚马逊网站的计算机软件、软件开发分类中排行均为第一,超越了众多实力派Python书,众多五星好评。也许你有所耳闻,这本书就是《Python编程无师自通——专业程序员的养成》。

《Python编程无师自通——专业程序员的养成》作者是一名自学成才的程序员,作为一名文科生他通过自学编程,掌握了编程技能并在eBay找到了一份软件工程师的工作。这本书是作者结合个人经验写作而成,旨在帮助读者从外行成长为一名专业的Python程序员。


《Python编程从入门到精通》

作者:叶维忠

本书循序渐进、由浅入深地详细讲解了Python语言开发技术,并通过具体实例演练了各个知识点的具体使用流程。全书共23章,其中第1~2章是基础知识部分,讲解了Python语言开发的基础知识,包括搭建开发环境和基础语法介绍;第3~9章是核心技术部分,分别讲解了简单数据类型,运算符和表达式,条件语句,循环语句,使用列表,使用元组、字典和集合,使用函数等知识,这些内容都是Python语言中最重要的语法知识;第10~15章是知识进阶部分,分别讲解了面向对象(上)、面向对象(下)、文件操作处理、异常处理、正则表达式、多线程开发知识。


《Python程序设计》(第3版)

作者:【美】John Zelle

Python之父作序推荐 ,Python 3 编程入门经典。本书以Python语言为工具教授计算机程序设计。本书强调解决问题、设计和编程是计算机科学的核心技能。本书特色鲜明、示例生动有趣、内容易读易学,适合Python入门程序员阅读,也适合高校计算机专业的教师和学生参考。


《数据结构(Python语言描述)》

作者:【美】Kenneth A. Lambert(兰伯特)

在计算机科学中,数据结构是一门进阶性课程,概念抽象,难度较大。Python语言的语法简单,交互性强。用Python来讲解数据结构等主题,比C语言等实现起来更为容易,更为清晰。

《数据结构 Python语言描述》第 1章简单介绍了Python语言的基础知识和特性。第 2章到第4章对抽象数据类型、数据结构、复杂度分析、数组和线性链表结构进行了详细介绍,第5章和第6章重点介绍了面向对象设计的相关知识、第5章包括接口和实现之间的重点差异、多态以及信息隐藏等内容,第6章主要讲解继承的相关知识,第7章到第9章以栈、队列和列表为代表,介绍了线性集合的相关知识。第 10章介绍了各种树结构,第 11章讲解了集和字典的相关内容,第 12章介绍了图和图处理算法。每章最后,还给出了复习题和案例学习,帮助读者巩固和思考。


《Python编程快速上手——让繁琐工作自动化》

作者:【美】Al Sweigart(斯维加特)

如今,人们面临的大多数任务都可以通过编写计算机软件来完成。Python是一种解释型、面向对象、动态数据类型的高 级程序设计语言。通过Python编程,我们能够解决现实生活中的很多任务。

本书是一本面向实践的Python编程实用指南。本书的目的,不仅是介绍Python语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。本书的首部分介绍了基本Python编程概念,第 二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。第 二部分的每一章都有一些项目程序,供读者学习。每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学的知识。附录部分提供了所有习题的解答。


《Python核心编程》(第3版)

作者:【美】Wesley Chun(卫斯理 春)

《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第 二版)》的全新升级版本,总共分为3部分。第 1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程、Microsoft Office编程、扩展Python等内容。第 2部分讲解了与Web开发相关的主题,包括Web客户端和服务器、CGI和WSGI相关的Web编程、Django Web框架、云计算、高 级Web服务。第3部分则为一个补充/实验章节,包括文本处理以及一些其他内容。


- END -


转载于:https://juejin.im/post/5d09d1a4f265da1b6b1cd9c8

你可能感兴趣的:(程序员学Python编程或许不知的十大提升工具)