Python
之旅 (六)文
/马儿 (marr@softwareliberty.org)程式语言是人们与电脑系统的沟通媒介工具,一般人学习程式语言的目的之一,所图还是实际写作出能够解决问题的程式片段或系统,也就是程式开发专案里的一部份。‘专案管理’或‘程式开发’都是相当庞大的工作,其复杂程度经常超过投身其中的人员所能想像,‘没有专案管理,就没有软体生命’,重要性难以言喻。尤其开放源码模式的开发专案,几乎都是透过网路媒介进行,如何将分散的资源紧密结合,在预期时距内完成专案成果,成为一门难度极高的艺术挑战。
Python
专案开发观摩俗话有云,学以致用,观摩并实际参与专案,是相当理想的学习经验。现有广为人知的开放源码软体,本身都具备一套‘有效’的专案管理体系,以
Python 使用族群为例,Python 语言的改进,以程式版本为里程碑,目前最新版的发展中版本为 2.2,日前已释出 2.2a1 版本供发展人员测试,每次 Python 语言要加入新特色或是修改内容前,发展人员都应该提出一份‘改进提案’(Python Enhancement Proposals, PEPs),而实际的开发工作,通常就是审视 PEP 的建议内容,并予以实作为原始码。有兴趣尝鲜的朋友,可以从网站下载
alpha 版本 (主要供发展人员) 或 beta 版本 (主要供非实用场合的一般使用者) 来测试。第一线的发展人员,通常是直接以 CVS (Concurrent Versions System) 维护方式来参与,并以 mailing list 来分享经验及讨论,CVS 与 mailing list 是获得专案成果最新最快的方式之一,开发人员应该加以认识了解。进一步由 Python 所衍生出来的程式专案,我们可以到 SourceForge 或 Freshmeat 寻宝,数百个大大小小的开发专案正在进行当中,建议配合自己的应用需要,找个能够协助解决日常生活问题的工作程式,一个成功的程式专案,必须在参与和沟通中不断进展。譬如说,喜欢利用 Python 语法写作视窗应用程式的朋友,可以找寻 wxPython 的相关资料。
●图
: wxPython 与 wxHTML 应用结合
另外,值得特别说明的是,
Zope 这套网站应用程式系统,它除了被誉为是 Python 的杀手级应用程式外,本身也衍生出日趋完整的程式开发与专案管理模式,我们将直接以 Zope 的相关资源,介绍 Python 学习者参与专案开发的可行途径。Zope
简介Zope 是‘Z Object Publishing Environment’的缩写,一套以 Python 程式语言为基底所发展的 Web Application Server 软体,简单地说,透过网页的操作介面,资料库管理人员、网页设计人员、网页内容维护人员,可以协同制作动态网页,相当轻松地把文件安全模式、资料库存取、物件体系、应用程式、流程管理,各式丰富功能整合起来。
如果你觉得不够具体,想知道 Zope 与现有哪些程式软体部份功能相仿,那么举些常见的例子:PHP、IBM Websphere、Enhydra、Tomcat、Cold Fusion、Microsoft Active Server Pages,说穿了,只要是能够产生动态网页的程式工具,我们都可以视之为相仿。至于究竟哪一套最好,在下无法提供答案,自古文人总相轻,网路上已有许多褒此贬彼的软体评比文件,请读者依自己的场合需要,事先货比三家,或是请教技术顾问人员。
内容管理
在此能够肯定的是,如果你的网站需求只是几张静态网页,那么采用
Zope 便显得杀鸡用牛刀,Zope 的优势在于应用物件模型,配合资料库储存的丰富资料,将庞大复杂的系统予以整合简化,我相信这样的应用趋势才是符合多数人的期盼。随着个人电脑的普及,电脑设备已经成为办公室里的重要商务工具,相信日后也会普遍至多数家庭,当个人电脑里塞满公司或个人的重要资料,此时一套有如档案柜的资料库系统,以及一套有问必答的内容管理介面,便成为日常应用中最重要的工具,目前最被看好的工具组合,即是网页伺服器与浏览器。
Microsoft 的 .NET 计画里,同样为网页内容物件勾勒出一个美好的未来,将网页内容储存在远端的伺服器上,透过特定的应用程式服务,使用者可以从原有的资料加工后获得所需的资讯服务。Zope
功能及应用早在
1996 年,Zope 系统的前身称为 Principia,是一套协助媒体单位进行线上出版流程的系统,因此 Zope 一开始即具备线上出版及内容管理的模型框架。身为一套网站应用程式系统,其功能应用场合相当广泛,例如提供一个类似
Yahoo 的搜寻网站,组织一个类似 SourceForge 的专案开发平台,架设一个类似 HotMail 的邮件伺服器。目前包括美国太空总署、美国海军、奇异航空引擎公司在内,均采用 Zope 于多种应用场合,当中最受欢迎的应用方式就是动态网页与资料库结合,而新的功能,诸如 XML 或 WebDAV,同时也在积极发展当中,大抵都围绕着协同式作业 (collaboration) 的主题。在架构设计上,
Zope 重视将逻辑 (logic)、内容 (content)、表现 (presentation)等三方面要素予以区隔,而以层层包装的方式,将程式人员与提供内容的一般使用者,整合在同样的浏览器介面下。举例来说,一般办公室常见的电脑工作,诸如签发公文、填写申请表、数据统计、专案开发管理、群组行事历等,都可以在 Zope 的整合环境下完成建置。Zope 本身既是一套架构体系,也是一套日益丰富完整的工具,从技术角度来看它,其功能内容几乎可以涵盖一般人的所有需求。
●图
: Zope 简略架构示意Zope
系统项目从网路下载的
Zope 软体,完整标准内容即包含许多项目,主要有:网页伺服器
Zope 附有一个内建的 ZServer 网页伺服器程式,由于是专为 Zope 环境所撰写,所以运作功能最完整。当然,你还是可以使用原本的 Apache Web Server 或是 Microsoft IIS,甚至任何一个可以支援 CGI 功能的网页伺服器,Zope 的操作环境同样可以配合它们。
网页式管理介面
在
Zope 环境下建置动态网页资料,可以透过一个相当一致的网页式管理介面,进行网页写作、程式撰写、资料库连结等工作,如此一来,使用者可以适用一套熟悉的介面,随时随地进行编修,降低客户端程式 (浏览器) 改版的不便。物件资料库
Zope 内附一个 ZODB 资料库,主要的档案管理工作,都被视为物件整理工作,以一种类别、继承的方式加以维护,这是 Zope 实质上较为与众不同之处。
关连式资料库介面
如果实际运作的资料是储存在别的大型资料库内,如
Oracle、Informix、PostgreSQL、Sybase、MySQL 等,那么也可以透过资料库介面来沟通,进而存取原本已储放在里头的各项资料。动态网页命令稿语言
在
Zope 环境下,如果想要设计出功能丰富的动态网页,可以透过其内建的 DTML (Document Template Markup Language),如果你原本已熟悉 Python 或 Perl 语法,也可以使用它们。社群发展及商业支援
Zope 的程式发展模式颇为特殊,社群与商业力量同时注入。自从 1998 年底 Zope 以开放源码授权方式释出后,Zope 的能见度与接受度日渐增加,社群朋友以 http://www.zope.org/ 为公共园地,分享设计理念及心得,而在背后提供完全支援的则是 Digital Creations 公司,该公司提供 Zope 资源整合与技术顾问,目前是 Zope 商业化服务的领导厂商。更由于 Zope 已成功闯出名号,Digital Creations 公司于今年正式将公司名称改为 Zope Corporation,而 Zope.Org 网站则称为 Zope Community。
值得一提的是,Python 程式语言的父亲 Guido van Rossum,于 2000 年十月间,将整个 PythonLabs 程式人员 (持续改进 Python 语言的核心人员) 从 BeOpen 公司移至 Digital Creations 公司,由此可见 Digital Creations 公司对 Zope 及 Python 开发的企图心。最新版之 Python 2.1 与 Zope 2.4 即是在 Digital Creations 公司的赞助下完成,而且 Python 与 Zope 的开发显得更为紧密相关。
开放源码授权
Zope 软体是以 Zope Public License (ZPL) 授权方式释出,和 Python 语言程式一样,都已通过认证为开放源码软体。简单地描述其条款大意,即是,一般的使用及修改,都在授权范围之内,无需额外的费用或授权金,进行软体散布时,大抵要求协助保留 Digital Creations 公司对 Zope 贡献之宣传。标准的 Zope 系统安装之后,可以发现一个 "Power by Zope" 的识别图样及连结,根据授权内容所述,如果使用者想要把此一识别图样移除,本身并不算是构成违反授权条款,但是使用者应保留对 Zope 原创贡献者的广告提示,在 Zope 系统安装后保留识别图样,似乎是最简单的方式了。使用者应该可以在 Zope 系统目录里找到 CREDITS.txt 档案,在此列名者即是 Zope 名人堂的程式大师。
Zope
安装方法最新版的
Zope 程式可以从官方网站 http://www.zope.org/Products/Zope/ 下载,我们可以找到二进位元档案及原始码档案,二进位元版本包括 Solaris 平台、Win32 平台、Linux glibc2 平台。另外,也有 rpm 档案供 Red Hat Linux 这类具备 rpm 系统的使用者安装。值得注意的是,最新版
Zope 2.4.0 需要事先安装好 Python 2.1,这项改变对 Windows 平台的使用者影响可能较小,但对 Linux 平台的使用者而言,恐怕就是不小的挑战。我建议 Windows 使用者可以直接下载 Zope 2.4.0 来安装,而 Linux 使用者可以下载 Zope 2.3.x 版本来安装,相信会是最省事的方法。●表
: 建议安装及程式下载处|
Windows 使用者 |
http://www.zope.org/Products/Zope/2.4.0/Zope-2.4.0-win32-x86.exe |
|
Linux 一般使用者 |
ftp://ftp.rpmfind.net/linux/contrib/libc6/i386/Zope-2.3.2-1.i386.rpm |
|
Linux 进阶使用者 |
ftp://ftp.rpmfind.net/linux/contrib/libc6/SRPMS/Zope-2.3.2-1.src.rpm |
|
已具备 Python 2.1者 |
http://www.zope.org/Products/Zope/2.4.0/Zope-2.4.0-src.tgz |
以
Windows 平台为例,下载后直接执行 Zope-2.4.0-win32-x86.exe 程式,选用预设之 Site Name 名称,输入 Zope 系统管理员帐号密码,最后安装程式还会询问‘是否要将 Zope 以 Win32 服务方式自动启动’,建议以自动启动方式较为方便。如果选择以手动方式启动 Zope,则可以开启 DOS 视窗,输入 bin\python.exe z2.py -a 127.0.0.1 这样的指令,其中的 -a 参数,即是用来指定准备提供连线服务的 IP 位址。Zope 伺服器的预设服务埠号是 8080,所以安装后必须以 http://127.0.0.1:8080/ 这样的网址型式才能看到 Zope 的管理画面。

●图: Windows 使用者安装时需指定 Site Name

●图
: 配合 Site Name 来指定预设安装目录
●图
: 指定 Zope 系统管理员帐号密码

●图
: 指定启动方式
●图
: 以系统服务方式自动启动伺服器
●图
: 手动在 DOS 视窗里以指令方式启动 ZopePython 2.1
带来的优点Python 2.1 版于今年四月间问世,此版本已经支援 Unicode,因此架构于上的 Zope 2.4.0 同样也享受此一好处,另外,WebDAV 的支援更加成熟,还有一些系统改善之处。如果你已经完成 Python 2.1 的升级动作,或有意了解 Zope 2.4.0 从 2.3.x 之后的改进之处,请参考‘Zope 2.4 升级指南’说明。由于多数的 Linux 散布套件,大抵还未即时全面跟上 Python 前阵子的快速更新动作,我猜想不少使用者很容易遇到 Python 版本不相容于 Zope 2.4.0 的问题。想要轻松尝新的朋友,可以考虑试用 Mandrake Linux 8.1 测试版本。
●表: 新版程式下载处
|
Mandrake 8.1 测试版 |
http://ftp.rpmfind.net/linux/Mandrake-iso/i586/ MandrakeLinux-8.1-Raklet-beta1-CD1.i586.iso http://ftp.rpmfind.net/linux/Mandrake-iso/i586/ MandrakeLinux-8.1-Raklet-beta1-CD2.i586.iso |
|
Python 2.1.1 |
http://www.python.org/ftp/python/2.1.1/Python-2.1.1.tgz |
|
i586 rpm |
ftp://rpmfind.net/linux/Mandrake-devel/cooker/ i586/Mandrake/RPMS/python-2.1.1-2mdk.i586.rpm |
|
src rpm |
ftp://rpmfind.net/linux/Mandrake-devel/cooker/ SRPMS/python-2.1.1-2mdk.src.rpm |
Zope
系统目录结构由于
Zope 程式在 Windows 平台上安装相当简易,因此我会建议一般使用者可以在 Windows 平台上安装 Zope 程式来进行测试与学习,待熟悉之后,自然再到 Linux 平台上执行服务。安装完毕后,以 Windows 平台为例,可以发现下列几个重要的目录档案:|
目录档案 |
说明 |
|
Extensions/ |
外部物件方法的储存目录 |
|
ZServer/ |
预设之伺服程式均位于此目录中 |
|
bin/ |
python 执行档案位于此目录中 |
|
doc/ |
文件目录区 |
|
import/ |
准备 import 进 ZODB 的物件可置于此目录 |
|
inst/ |
与系统安装有关的目录 |
|
lib/ |
目录里具备完整的 Zope 系统及 Product 扩充目录 |
|
pcgi/ |
Persistent CGI 的程式目录 |
|
utilities/ |
存放一些工具命令稿或模组程式 |
|
var/ |
内有系统运作执行时所产生的程式序编号记录档 |
|
z2.py |
系统执行时的资料设定档 |
|
zpasswd.py |
Zope 帐号密码管理程式 |
Zope
文件计画好的软体必须要有好的文件。
Zope Documentation Projects (ZDP) 是由一群电子数位志工所发起的文件计画,致力于创作出有用而易学的 Zope 学习文件,整个文件创作及维护的运作,同样是以协同式专案方式来进行。整个
ZDP 之下还分有许多子计画,主要有:1. ZBook
在网路上共同写作一本适用于
Zope 入门及进阶使用者的书籍,每个章节可以透过提案、讨论方式累积,目前已分有五大部份,并有人译成法文版本。2. ZFAQ
以收集问答方式累积内容,目前分有十四个目录类别,计有上百条问答集,不过目录类别似乎还未分类稳定。
3. ZSnippets
收集程式高手们的程式片段,目前分有六个目录类别,是
Zope 新手学习的极佳参考。另外,还有
HOWTO 与 Tips 也在累积当中。随着全球各地的使用者日益增多,Zope 程式与文件也开始重视国际化议题,有人写作出 ZClass 的介面模组,使用者可以照自己的语文需求来调整管理画面,有人投入文件翻译工作。
●图
: Zope 文件计画里开始有不少国际化翻译工作Zope
学习管道这一年以来,很高兴看到
Python 与 Zope 的书已经广泛出现,虽然大多数还是英文书,但有心学习的朋友总算有了完整的工具,而非全然在网路上搜寻。在此介绍几项学习资源:书籍
: The Zope Book此书已在今年七月间出版,由
Zope 的开发人员亲自执笔,深入浅出地带领读者认识 Zope 的内涵及架设实务,无论新手或老鸟均适合,内容主要包括:内容管理实务,DTML 设计,ZSQL 连结资料库功能,堪称 Zope 世界的重量级书籍。作者
Amos Latteier 及 Michel Pelletier 对于这本书的制作,投入相当大的心力,不但尽力要求版本跟上最新的 Zope 发展,更尽心让内容精确无误。本书内容亦可以在网路上阅读,读者可以下载相当精美的 PDF 版本,开放源码前辈的热忱似此,令人感佩无以复加。
●图
: Zope 世界里的重量级经典书籍
: The Book of Zope本书着重
ZClass 设计与 Zope 程式写作,内容包括系统安装、内容管理、ZClass、ZCatalog、资料库、Python 程式设计及除错。不过,这本书预计今年十月才问世,由 beehive 公司编辑,这是一家德国 ISP 公司,在 Zope 专业领域已出版不少受欢迎的电子书。

●图
: The Book of Zope 预计在今年十月出版Zope
快速参考手册 (ZQR)如果你已经对
Zope 具备基本了解,而且有意长期参与 Zope 系统的开发,那么 Zope Quick Reference (ZQR) 显然就是必备的工具书了。目前 ZQR 置于 ZDP 之下,收集了相当完整的 Zope 技术内容细节,列印下来就可以放在书桌上参考了。Zope
邮递论坛目前已有超过十种的
mailing list 在专门讨论 Zope 技术,这里都是观摩、讨论最新技术的最佳场所,不过,新手们可要事先做好功课,以免到此消化不良了。想要线上直接交谈的朋友,还可以透过 #zope 这个在 irc.zope.net 上的频道,以键会友,如果有需要,可以预先安排交谈时段,以便记录下精彩的讨论内容。整合资源及力量
‘任何喜爱网站系统的朋友,都应该来瞧瞧
Zope。’一个以
Python 语言为基底而发展的应用程式,很短的时间内竟也成长得枝繁叶茂,使用族群日益扩大,Zope 除了真的解决许多人的实务需求外,我相信它的开放性与严谨的专案管理模式,才是促成它能够不断蓬勃的原因,看到这么多同好一起贡献才智心力,似乎数位世界的大同理想已在他们手上实践。我在学习
Python 与 Zope 的过程当中,认为 Zope 确实能够有效解决自己所面对的资讯自动化问题,一些功能设计显得比 PHP 之类的动态网页工具来得优秀,因此乐意与大家分享这些经验。但 Zope 真正与众不同的地方,并不在于它的技术面,而是它赋予所有参与者完整的贡献机会,这正是一个功能多样、分工细致、要求效率的网站系统,所应提供的本质特点。如果你在学习
Python 之余,也想实际参与 Python 的专案开发,那么 Zope 绝对是你的快乐天堂。相关资源
[1] Python Enhancement Proposals 网页,网址 http://python.sourceforge.net/peps/
[2] Concurrent Versions System 网页,网址 http://www.cvshome.org/docs/
[3] mailman 网站,网址 http://www.list.org/
[4] wxPython 网站,网址 http://wxpython.sourceforge.net/
[5] Source Forge 网站,网址 http://www.sourceforge.net/
[6] Freshmeat 网站,网址 http://freshmeat.net/
[7] Zope 2.4 Migration Guide 网页,网址 http://www.zope.org/Products/Zope/2.4.0/Zope24MigrationGuide.html
[8] Zope Documentation Projects 网页,网址 http://zdp.zope.org/
[9] The Zope Book 网页,网址 http://www.zope.org/Members/michel/ZB/
[10] Zope Quick Reference 网页,网址 http://zdp.zope.org/projects/zqr
[11] Zope Mailing Lists 网页,网址 http://www.zope.org/Resources/MailingLists
[12] Zope Chat 网页,网址 http://www.zope.org/Documentation/Chats