内容


可爱的 Python

点评 Python IDE

Python 开发变得更容易

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 可爱的 Python

敬请期待该系列的后续内容。

此内容是该系列的一部分:可爱的 Python

敬请期待该系列的后续内容。

Python IDE 中哪些方面值得期待

虽然我日常工作中要用到很多种计算机,其上运行的操作系统有 OS/2,Linux,FreeBSD,还有很多运行的是 Windows,不过,我发现越来越多的工作是在我的 PowerBook 膝上电脑上完成的;我确实喜欢能拥有完美的 GUI 背后的 Unix 内核——也许我所喜欢的还不只这一点,比如我可以在当地的一家咖啡馆中来撰写这篇文章。就我的个人经验而言,与我交谈过的相当多的 Python 开发者使用的都是同样的平台。在这种 类 Unix/X11 环境下进行开发的最大好处之一是,我所创建的每一个应用程序,都可以不加修改地上传到我的基于 Linux 的 Web 服务器上,或者发布给使用 Linux 的桌面用户。(不幸的是,我感觉基于 Linux 的膝上电脑仍然远少于基于 OS X 的)。

首先我还要承认另一点。尽管这些年我尝试使用过许多程序语言的 IDE,但是当我要做一些实际工作时,好像每次到最后还是使用“喜欢的文本编辑器加命令行”来完成。很难说服我去使用表单构造器、代码库、结构化的应用程序模板、代码向导以及类似的东西。此外,我还写了一本关于文本处理的书——不是关于 GUI 开发的——我所完成的绝大部分编程工作都更接近于前者而不是后者。

在本期文章中,我着眼于四种 IDE/编程编辑器——它们之中有三个是广为应用的跨平台的编辑器(在 Linux 桌面系统上也可以运行得很好),另一个只能在 Mac 上使用。jEdit 是一个通用的编辑器,可以运行于任意较新的 JVM 之上。Leo 和 IDLEfork 本身是用 Python 编写的,并用 Tkinter 作为它们的 GUI。PythonIDE 是 MacPython 发行版本的一部分,只能运行于 MacOS。

以下是我期望在 Python 文本编辑器中应该具备的功能清单条目:语法高亮;代码折叠;自动补全;缩进检测;块缩进/取消缩进;块注释/取消注释;交互式的 Python shell。其他一些功能如果也具备当然更好:类浏览器、函数跳转列表、集成调试器和分析器(profiler)。我所考虑的这几种编辑器都不支持图形界面设计器或者“拖放”式开发。

一个编辑器即是全部

尽管我的文章标题可能向许多读者暗示了 emacs ——并且尽管相当多的读者推荐我考虑 emacs ——我还是不能完全接受它那晦涩的按键操作等等诸如此类的特性。虽然我知道 emacs 可以 完成所有的事情,本文中我要讲述的却是 JEdit,这个编辑器具备了几乎所有同样的功能。jEdit 是一个 GPL 项目,是用 Java 编写的,所以可以运行于许多平台之上;它有支持很多编程语言的绑定和定制;它允许用户创建并共享宏和“插件”,以使编辑器更为强大。没有为 Python 特别定制的 jEdit,不过您不用去顾虑这一点,因为有很多用于 Python 的绑定和插件。

基本上说,jEdit 涵盖了全部功能。它有很好的语法高亮(支持多种语言)、好几种代码折叠的风格、支持块缩进/取消缩进。jEdit 支持块注释(分行注释或者使用语言中的开始/结束注释定界符)。没有将块注释取消的标准快捷键,但是写一个宏来完成这项功能并不难。实际上,一般而言,jEdit 的脚本功能是它最优秀的特性之一。

图 1. 带有 Jython 2.1 的 jEdit
jEdit 截屏
jEdit 截屏

您可以保存按键的宏(并将它们设置为快捷键),还可以将整个 Java 程序编写为具有任意复杂功能的插件。无论如何,我自己在学习如何使用 jEdit 的 API 来编写自己的插件时没有遇到过困难(我并不擅长 Java)。很幸运,有许多聪明的人为我编写了很多插件——最方便的是,在 jEdit 自己的友好的界面中就可以安装、移除和配置那些插件(有时您需要重新启动 jEdit 以使新插件生效)。例如, Structure Browser就是一个有用的插件,它用一个可折叠的树来显示函数、类和方法,这样就可以浏览或显示一个大模块中的上下文。

jEdit 的一些极好的 Python 专用功能来自于 Jython 插件。完整的 Jyphon 发行版被打包为 jEdit 的一个插件。当然,这时您会倾向于选择 Jyphon 本身的最新版本,本文中用的是 2.1,比较老(相对于 CPython 最近发布的 2.3 版本)。不过,如果您可以接受这个 Jyphon 版本,使用 jEdit 您就可以完成真正的 Python 开发工作。您除了可以打开交互式的 shell 之外,还可以运行一个 Python 缓冲区,以使输出或者显示于交互式的 shell 中,或者存入新的缓冲区中(以后也许会保存)。保存交互式会话等独到的小功能也很实用。

以上提到的实际只是 jEdit 的一些表面特性,因为它具有用于其他语言(同您所期望的一样,尤其是 Java)的类似功能——和通用的“酷的”插件,比如 JDiff 或者 Code2HTML,前者用于比较文件,后者可以创建语法高亮的 HTML。

尽管不属于 Python 话题,我觉得还是非常有必要介绍 jEdit 的许多 XML 特性。许多读过我的文章 XML Mattersroundups of XML editors(参阅 参考资料)的读者都建议我其中应该包括 jEdit ——而且,实际上我经常用它编辑 XML。jEdit 的全局可视化括号匹配功能可以帮助在 XML 中识别出相对应的开/关;作为 XML 的“修饰”,插件还支持 XPath 和 XSLT。

IDLE 杂谈

早在 2001 年 3 月,本专栏第一次介绍 Python IDE 时,我就提到了 IDLE(参阅 参考资料)。总的来说,那些评论仍然准确,不过 IDLE 又增加了许多功能,同时有了一些改进。为此,我下载了 IDLEfork 0.9b1。IDLEfork 项目设计用来测试对 IDLE 的改进,并将成功的改进添回到 IDLE 本身中去。最新的 IDLEfork 版本是 0.9b1,对于基本的 IDLE 来说有许多显著的改进,因此,如果您计划要使用 IDLE,我建议您去下载 IDLEfork 0.9b1。它现在支持在代码中设置断点,以在测试运行时到此停止循环;运行时还会创建各自独立的环境 (避免名称空间相互影响)。新的 GUI 配置界面也值得关注,相对于在 README 文件中找出要修改的内部文件,这个界面友好得多。

图 2. 运行 IDLE
IDLE 界面的屏幕快照
IDLE 界面的屏幕快照

IDLE 开始运行时出现的是一个增强的交互式 shell 窗口(相对于基本的交互式工具,它对复制、粘贴、滚动提供了更好的支持)。一想到命令回调我就喜忧参半,因为您得移动光标到您想要重复的行。我想我更喜欢 jEdit 或者 Python shell 的 readlines 风格。在进行大多数的开发时您用的是 Python-aware 编辑器(不支持代码折叠,但是有优秀的语法高亮和代码补齐功能)。您还可以有一个类浏览器和调试器。

IDLE 的菜单是 Tk“tear-off”风格的;也就是说,点击任意下拉菜单顶部的虚线将会使那个菜单具有自己的持久窗口。如果能使“Edit”菜单能“停靠”在您的桌面边上,使用起来将特别方便。IDLE 的调试器支持设置断点、单步执行和观察变量;但是不能获得内存位置和变量的内容,也不能进行执行的计时和其他统计。

IDLE 具备您期望 Python 编辑器应该具备的大部分优秀特性:注释/取消注释;缩进/取消缩进;正则表达式搜索;跳转行;将制表符转换为空格或者将空格转换为制表符。它没有特别精心的设计,但是致力于那些您使用 Python 最需要的功能。我非常喜欢它在语法高亮中可以选择加粗颜色,虽然大多数编辑器可以配置,但是默认只给出比较柔和的颜色。不幸的是,在 Mac OS X 上,不是所有的关键值绑定都可以生效——不过这可能是 X11 支持的问题,或者是在我的系统中实际上 Tk/Aqua 没有在运行的结果。IDLE 本身是无辜的;在测试中我只是用鼠标来了解更多我不常用的菜单。Linux 系统通常对关键值绑定有更好的支持,但在一定程度上依赖于您所使用的窗口管理器。

如果您需要一个通用的可以在大多数平台上工作的 Python IDE/编辑器,而且不需要除了 Python 本身和 Tkinter 之外的任何其他功能,那么 IDLE 是您最佳的选择。

tangled 网络

随着时间的推移,相当多的读者向我推荐 Leo。Leo 是与我所提到的其他编辑器/IDE,或者大多数读者将要使用的任何东西都很不相同的一类应用程序。Leo 的根本特点在于 Donald Knuth 的“literate programming”的概念——也就是那种认为源代码只是构成程序的一小部分的想法。程序的真正主体是对它的算法、结构、目的和用法的描述——实现它的源代码并不是主要的。总之,这是一个概念;我并没有对此深信不疑,我也并不确认这种想法是错误的。

图 3. 欢迎使用 Leo
Leo 界面的屏幕快照
Leo 界面的屏幕快照

一个 Leo 工程被组织为一组要点,这些要点基本上是一个对应到程序中的分层的可折叠的 内容(节点)树。一些节点包含有源代码片段,一些节点包含的是文档,还有一些节点主要是组织深层的子节点。在树中选择一个节点可以在编辑区中显示出代码或者相关内容。例如,一个 Python 模块通常会作为一个节点,并包含对应于它的类的子节点。每个类节点可能包括一些文档,还会有一组方法节点。结果是,这种对节点的组织在编辑环境中产生了深层次的折叠;但是一个节点远不只是一个折叠点——例如,节点可以被克隆,所以在一个大的工程中,同一个节点可以出现在多个相应的位置。

可以通过 tanglinguntangling 工程来在 Leo 工程外部创建实际的源代码,或者将其导入到 Leo 工程。例如,Leo 可以很好地从一个存在的 .py 文件中自动生成要点。当然,您还可以从头开始一个 Leo 工程,并指定哪些内容被写入到哪些文件 (用什么语言、代码或文档)。节点的描述详细说明了当 untangle 时哪些需要被写入,以及这些部分的外观和行为。

对编辑者来说,Leo 的内容区与 IDLE 是等同的。Leo 中的交互式 Python shell 实际上看起来是直接借用于 IDLE。但是 Leo 并没有真正致力于传统的代码编辑问题——而是作为组织者、工程工作空间以及结构化开发环境。Per Knuth 的观点认为实际的代码只不过是外围的东西。

事实上,我还没有真正充分使用 Leo,以完全 理解它所推崇的开发风格。我觉得它可能对很多类工程来说是确实有用的,包括应用程序和文档——但是这需要去适应 Leo 的风格。尽管如此,我的许多读者对它还是非常推崇。

OS X 的自然选择

MacPython 带有一个名字非常直观的 IDE,即“PythonIDE”。两年半以前,在最后一次 IDE 综述中我也曾经提到过它,总体上它还是原样。的确,相对于我在本文中提到的其他工具的 Tk 或 Swing 界面,PythonIDE 更让人感觉像是在 MacOS 上工作。相对其他 IDE 来说,PythonIDE 除了让人感觉自然之外,还让人觉得简单得多——甚至是未加修饰的。当然,虽然您在 PythonIDE 中编写的代码可以很好地移植到 Linux 桌面,但是环境本身是不可以移植。

首先,PythonIDE 的编辑器不支持语法高亮,而我已经习惯于这一功能。它对 Python 支持得比较好的是缩排、块缩进/取消缩进、类/函数浏览器(它隐藏于水平滚动条之后)。对象浏览器很值得关注,而且它可能是独一无二的。对象浏览器不仅仅为您提供了一个可折叠树形式的代码视图,它还让您可以看到对象本身的生动的描述——甚至包括那些在您的 PYTHONPATH 中可以导入的那些模块。最后一项功能是一个探索支持模块的好方法,不管那些模块是标准的还是第三方的(而且可以向您提供文档说明,不仅包括是谁开发了此模块,还有其他一些信息)。

总体上看,PythonIDE 在组织方面与 IDLE 或 jEdit 类似。您可以得到一个带有交互式 shell 的编辑器。代码和执行输出结果可以显示在同一个或者另一个窗口,并且您可以交互式地向前或向后复制。PythonIDE 还使用了一个单独的“输出”窗口,相对于 IDLE 使用两个交互式 shell 窗口,这可能是一个更好的设计。但是该编辑器在许多方面都是保持基本的功能,例如,在搜索对话框中甚至不使用正则表达式。

不过,PythonIDE 最杰出的两方面在于它的调试器和分析器。IDLE 有调试器(jEdit/Jython 没有),但是 PythonIDE 的调试器让人感觉更好用。分析器仍是 PythonIDE 所特有的,当然,您也可以通过很难用的 profiletimeit 模块来获得此效果。


相关主题

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
  • 阅读 可爱的 Python系列 所有的文章
  • jEdit 是用 Java 编写的,已经经历了五年多的发展历程。
  • IDLEfork 对大多数 Python 发行版本附带的 IDLE 版本做了一些很好的改进;不过,这些改进中最好的那些会和新发行版本的 Python 一起添加到 IDLE 本身中。
  • Leo 被认为是一个艺术化的编程工具、数据组织器和工程管理器。
  • MacPython 可以用于 Mac OS X,以及 Mac OS 9 或更早的版本。
  • 访问 PythonInfo Wiki您可以深入了解 Python 开发工具,并总体了解 Python。
  • 在 Gnu.org 处下载 Emacs 和文档——甚至查明它为什么叫做 Emacs(出人意料的是,它并不是代表 escape-meta-alt-control-shift)。
  • 当然,您可以使用 Emacs 来进行 Java 编程,或者使用 DB2 (您知道,您可用 Emacs 完成所有的事情!)。深入阅读“ Emacs a top-notch Java IDE? You bet!”和“ Tips for Using Emacs with DB2”。
  • Donald E. Knuth是斯坦福大学从事“The Art of Computer Programmingis”的退休教授,他是 Literate Programming (Center for the Study of Language and Information, 1992) 一文的作者。
  • IBM's Rational Rose XDE Developer 提供的 IDE 可以支持 Java, C++, Visual Studio, .NET 等。
  • IBM alphaWorks 提供了一些 Java IDE的下载。
  • 了解自从 David 上一次在“ Python IDE 测评:成熟与未成熟”一文中介绍 Python IDE 到现在都发生了哪些变化。
  • 阅读 David 在“ XML 问题:XML 编辑器综述”一文中关于 XML 编辑器的介绍。

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=21619
ArticleTitle=可爱的 Python: 点评 Python IDE
publish-date=02012004