David 着眼于四个运行于类 Unix 操作系统之上
开源 Python 代码开发环境。他对两个通用
和两个 Python 专用
编辑器/环境进行了评价,并对比了其各自
优点。
Python IDE 中哪些方面值得期待
字串7
虽然我日常工作中要用到很多种计算机,其上运行
操作系统有 OS/2,Linux,FreeBSD,还有很多运行
是 Windows,不过,我发现越来越多
工作是在我
PowerBook 膝上电脑上完成
;我确实喜欢能拥有完美
GUI 背后
Unix 内核——也许我所喜欢
还不只这一点,比如我可以在当地
一家咖啡馆中来撰写这篇文章。就我
个人经验而言,与我交谈过
相当多
Python 开发者使用
都是同样
平台。在这种 类 Unix/X11 环境下进行开发
最大
处之一是,我所创建
每一个应用程序,都可以不加修改地上传到我
基于 Linux
Web 服务器上,或者发布给使用 Linux
桌面用户。(不幸
是,我感觉基于 Linux
膝上电脑仍然远少于基于 OS X
)。
字串1
首先我还要承认另一点。尽管这些年我尝试使用过许多程序语言
IDE,但是当我要做一些实际工作时,
像每次到最后还是使用“喜欢
文本编辑器加命令行”来完成。很难说服我去使用表单构造器、代码库、结构化
应用程序模板、代码向导以及类似
东西。此外,我还写了一本关于文本处理
书——不是关于 GUI 开发
——我所完成
绝大部分编程工作都更接近于前者而不是后者。
字串2
在本期文章中,我着眼于四种 IDE/编程编辑器——它们之中有三个是广为应用
跨平台
编辑器(在 Linux 桌面系统上也可以运行得很
),另一个只能在 Mac 上使用。jEdit 是一个通用
编辑器,可以运行于任意较新
JVM 之上。Leo 和 IDLEfork 本身是用 Python 编写
,并用 Tkinter 作为它们
GUI。PythonIDE 是 MacPython 发行版本
一部分,只能运行于 MacOS。
以下是我期望在 Python 文本编辑器中应该具备
功能清单条目:语法高亮;代码折叠;自动补全;缩进检测;块缩进/取消缩进;块注释/取消注释;交互式
Python shell。其他一些功能如果也具备当然更
:类浏览器、函数跳转列表、集成调试器和分析器(profiler)。我所考虑
这几种编辑器都不支持图形界面设计器或者“拖放”式开发。
字串6
一个编辑器即是全部
尽管我
文章标题可能向许多读者暗示了 emacs ——并且尽管相当多
读者推荐我考虑 emacs ——我还是不能完全接受它那晦涩
按键操作等等诸如此类
特性。虽然我知道 emacs 可以 完成所有
事情,本文中我要讲述
却是 JEdit,这个编辑器具备了几乎所有同样
功能。jEdit 是一个 GPL 项目,是用 Java 编写
,所以可以运行于许多平台之上;它有支持很多编程语言
绑定和定制;它允许用户创建并共享宏和“插件”,以使编辑器更为强大。没有为 Python 特别定制
jEdit,不过您不用去顾虑这一点,因为有很多用于 Python
绑定和插件。 字串7
基本上说,jEdit 涵盖了全部功能。它有很
语法高亮(支持多种语言)、
几种代码折叠
风格、支持块缩进/取消缩进。jEdit 支持块注释(分行注释或者使用语言中
开始/结束注释定界符)。没有将块注释取消
标准快捷键,但是写一个宏来完成这项功能并不难。实际上,一般而言,jEdit
脚本功能是它最优秀
特性之一。
字串3
图 1. 带有 Jython 2.1
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 中,或者存入新
缓冲区中(以后也许会保存)。保存交互式会话等独到
小功能也很实用。 字串8
以上提到
实际只是 jEdit
一些表面特性,因为它具有用于其他语言(同您所期望
一样,尤其是 Java)
类似功能——和通用
“酷
”插件,比如 JDiff 或者 Code2HTML,前者用于比较文件,后者可以创建语法高亮
HTML。 字串8
字串6
尽管不属于 Python 话题,我觉得还是非常有必要介绍 jEdit
许多 XML 特性。许多读过我
文章 XML Mattersroundups of XML editors(参阅 参考资料)
读者都建议我其中应该包括 jEdit ——而且,实际上我经常用它编辑 XML。jEdit
全局可视化括号匹配功能可以帮助在 XML 中识别出相对应
开/关;作为 XML
“修饰”,插件还支持 XPath 和 XSLT。
字串9
IDLE 杂谈 字串3
早在 2001 年 3 月,本专栏第一次介绍 Python IDE 时,我就提到了 IDLE(参阅 参考资料)。总
来说,那些评论仍然准确,不过 IDLE 又增加了许多功能,同时有了一些改进。为此,我下载了 IDLEfork 0.9b1。IDLEfork 项目设计用来测试对 IDLE
改进,并将成功
改进添回到 IDLE 本身中去。最新
IDLEfork 版本是 0.9b1,对于基本
IDLE 来说有许多显著
改进,因此,如果您计划要使用 IDLE,我建议您去下载 IDLEfork 0.9b1。它现在支持在代码中设置断点,以在测试运行时到此停止循环;运行时还会创建各自独立
环境(避免名称空间相互影响)。新
GUI 配置界面也值得关注,相对于在 README 文件中找出要修改
内部文件,这个界面友
得多。
图 2. 运行 IDLE
字串1

IDLE 开始运行时出现
是一个增强
交互式 shell 窗口(相对于基本
交互式工具,它对复制、粘贴、滚动提供了更
支持)。一想到命令回调我就喜忧参半,因为您得移动光标到您想要重复
行。我想我更喜欢 jEdit 或者 Python shell
readlines 风格。在进行大多数
开发时您用
是 Python-aware 编辑器(不支持代码折叠,但是有优秀
语法高亮和代码补齐功能)。您还可以有一个类浏览器和调试器。 字串6
IDLE
菜单是 Tk“tear-off”风格
;也就是说,点击任意下拉菜单顶部
虚线将会使那个菜单具有自己
持久窗口。如果能使“Edit”菜单能“停靠”在您
桌面边上,使用起来将特别方便。IDLE
调试器支持设置断点、单步执行和观察变量;但是不能获得内存位置和变量
内容,也不能进行执行
计时和其他统计。 字串9
IDLE 具备您期望 Python 编辑器应该具备
大部分优秀特性:注释/取消注释;缩进/取消缩进;正则表达式搜索;跳转行;将制表符转换为空格或者将空格转换为制表符。它没有特别精心
设计,但是致力于那些您使用 Python 最需要
功能。我非常喜欢它在语法高亮中可以选择加粗颜色,虽然大多数编辑器可以配置,但是默认只给出比较柔和
颜色。不幸
是,在 Mac OS X 上,不是所有
关键值绑定都可以生效——不过这可能是 X11 支持
问题,或者是在我
系统中实际上 Tk/Aqua 没有在运行
结果。IDLE 本身是无辜
;在测试中我只是用鼠标来了解更多我不常用
菜单。Linux 系统通常对关键值绑定有更
支持,但在一定程度上依赖于您所使用
窗口管理器。 字串4
如果您需要一个通用
可以在大多数平台上工作
Python IDE/编辑器,而且不需要除了 Python 本身和 Tkinter 之外
任何其他功能,那么 IDLE 是您最佳
选择。 字串6
tangled 网络 字串3
随着时间
推移,相当多
读者向我推荐 Leo。Leo 是与我所提到
其他编辑器/IDE,或者大多数读者将要使用
任何东西都很不相同
一类应用程序。Leo
根本特点在于 Donald Knuth
“literate programming”
概念——也就是那种认为源代码只是构成程序
一小部分
想法。程序
真正主体是对它
算法、结构、目
和用法
描述——实现它
源代码并不是主要
。总之,这是一个概念;我并没有对此深信不疑,我也并不确认这种想法是错误
。
图 3. 欢迎使用 Leo 字串4

一个 Leo 工程被组织为一组要点,这些要点基本上是一个对应到程序中
分层
可折叠
内容(节点)树。一些节点包含有源代码片段,一些节点包含
是文档,还有一些节点主要是组织深层
子节点。在树中选择一个节点可以在编辑区中显示出代码或者相关内容。例如,一个 Python 模块通常会作为一个节点,并包含对应于它
类
子节点。每个类节点可能包括一些文档,还会有一组方法节点。结果是,这种对节点
组织在编辑环境中产生了深层次
折叠;但是一个节点远不只是一个折叠点——例如,节点可以被克隆,所以在一个大
工程中,同一个节点可以出现在多个相应
位置。 字串8
字串1
可以通过 tangling和 untangling 工程来在 Leo 工程外部创建实际
源代码,或者将其导入到 Leo 工程。例如,Leo 可以很
地从一个存在
.py 文件中自动生成要点。当然,您还可以从头开始一个 Leo 工程,并指定哪些内容被写入到哪些文件(用什么语言、代码或文档)。节点
描述详细说明了当 untangle 时哪些需要被写入,以及这些部分
外观和行为。 字串5
对编辑者来说,Leo
内容区与 IDLE 是等同
。Leo 中
交互式 Python shell 实际上看起来是直接借用于 IDLE。但是 Leo 并没有真正致力于传统
代码编辑问题——而是作为组织者、工程工作空间以及结构化开发环境。Per Knuth
观点认为实际
代码只不过是外围
东西。
字串4
事实上,我还没有真正充分使用 Leo,以完全 理解它所推崇
开发风格。我觉得它可能对很多类工程来说是确实有用
,包括应用程序和文档——但是这需要去适应 Leo
风格。尽管如此,我
许多读者对它还是非常推崇。 字串8
OS X
自然选择
MacPython 带有一个名字非常直观
IDE,即“PythonIDE”。两年半以前,在最后一次 IDE 综述中我也曾经提到过它,总体上它还是原样。
确,相对于我在本文中提到
其他工具
Tk 或 Swing 界面,PythonIDE 更让人感觉像是在 MacOS 上工作。相对其他 IDE 来说,PythonIDE 除了让人感觉自然之外,还让人觉得简单得多——甚至是未加修饰
。当然,虽然您在 PythonIDE 中编写
代码可以很
地移植到 Linux 桌面,但是环境本身是不可以移植。
首先,PythonIDE
编辑器不支持语法高亮,而我已经习惯于这一功能。它对 Python 支持得比较
是缩排、块缩进/取消缩进、类/函数浏览器(它隐藏于水平滚动条之后)。对象浏览器很值得关注,而且它可能是独一无二
。对象浏览器不仅仅为您提供了一个可折叠树形式
代码视图,它还让您可以看到对象本身
生动
描述——甚至包括那些在您
PYTHONPATH 中可以导入
那些模块。最后一项功能是一个探索支持模块
方法,不管那些模块是标准
还是第三方
(而且可以向您提供文档说明,不仅包括是谁开发了此模块,还有其他一些信息)。
字串9
总体上看,PythonIDE 在组织方面与 IDLE 或 jEdit 类似。您可以得到一个带有交互式 shell
编辑器。代码和执行输出结果可以显示在同一个或者另一个窗口,并且您可以交互式地向前或向后复制。PythonIDE 还使用了一个单独
“输出”窗口,相对于 IDLE 使用两个交互式 shell 窗口,这可能是一个更
设计。但是该编辑器在许多方面都是保持基本
功能,例如,在搜索对话框中甚至不使用正则表达式。
字串6
字串9
不过,PythonIDE 最杰出
两方面在于它
调试器和分析器。IDLE 有调试器(jEdit/Jython 没有),但是 PythonIDE
调试器让人感觉更
用。分析器仍是 PythonIDE 所特有
,当然,您也可以通过很难用
profile 和 timeit 模块来获得此效果。
![我要研发网[www.51dev.com]](/templets/images/toplogo.gif)
