Jython 的docstring 严重缺失, pydev的calltip基本上没什么用, 所以使用 jython 开发比较痛苦.
但 jython 相比 cpython 仍有2个优势: 1. windows/linux下安装都超级简单, 在linux下安装也不需要root账号. 2. 可以使用丰富的java类库, 比如, teradata只提供jdbc driver, 没有python API module=========================如何让jython自动加载一个新的jar=========================用 jython 又写个小程序, 需要使用 teradata 的 jdbc 库(terajdbc4.jar和tdgssconfig.jar). 开发时将两个jar库加到Eclipse(pydev)的 external library中, 开发调试都很顺利. 但部署时, 就要考虑如何让jython加载我们的jar包了. 最简单的方法是, 将terajdbc4.jar配到OS的CLASSPATH环境变量中.以前我研究出的另一个方法, 是修改 jython.jar 中的 MANIFEST.MF文件, 把依赖库加到MANIFEST.MF的Class-Path中, 具体配置如下,
Class-Path: lib/tdgssconfig.jar lib/terajdbc4.jar这涉及到解压/更新文件/压缩, 确实很麻烦. 随便改动jython.jar也不是一个好的做法. 另外, 这种方法只能解决jar 依赖, 如果是依赖一个java class, 这种方法就不好用了. 这次决心找找有没有其他办法, 研究了Jython的源码, 终于找到一个方便的方法. 即修改jython的registry 文件. 下面是详细说明. 在查看jython的源码后 (C:\jython2.5.2\src\org\python\core\packagecache\SysPackageManager.java)有如下收获: jython会根据安装根目录下 registry 文件的配置, 预先加载一些java 的jar 和 class, 下面是registry文件相关的3个设置, (1)python.packages.paths, 默认取值为java.class.path, sun.boot.class.path, 实际的目录为可通过java代码. 而这两目录值是可以jython.bat中的JAVA_HOME推导出来的. 注意该设置的取值仍然register的entry, 如果我们要新加目录, 增加一个property entry. jython 会加载目标目录中的所有class. (2)python.packages.fakepath, 没有默认值, 取值是一个实际的目录地址. jython 会加载目标目录中的所有class. (3)python.packages.directories, 默认值为java.ext.dirs, 实际的目录目录值是可以jython.bat中的JAVA_HOME推导出来的, 一般为 Your_JavaHome/lib/ext 注意该设置的取值仍然register的entry. jython 会加载目标目录中的所有 jar. 默认的 registry 文件的设置 # Properties to check for initializing and updating the package cache# Hopefully you won't have any need to change thesepython.packages.paths = java.class.path, sun.boot.class.pathpython.packages.directories = java.ext.dirs 修改后的设置, 增加了一个 apache.class.path, python.packages.fakepath 和 teradata.jdbc.dirspython.packages.paths = java.class.path, sun.boot.class.path, apache.class.pathpython.packages.directories = java.ext.dirs, teradata.jdbc.dirspython.packages.fakepath = c:\\jboss_java_util\\classesapache.class.path = c:\\apache_java_util\\classesteradata.jdbc.dirs = c:\\teradata\\jdbc=========================如果碰到其他疑难杂症, 怎么办?=========================一旦碰到问题, 关键是要知道问题的原因, 修改 registry 文件的属性 python.verbose 为debug, 会输出更多的信息, 有助于我们找到问题的根源. 默认设置:python.verbose = message修改后的设置:python.verbose = debug