jython是python的java版,他和c版本的python相比,它的優勢是:可以編譯為java的class檔案被java程式使用,可以被java程式嵌入,可以使用java的類庫。但目前jython的版本一直比較低,開發並不是很活躍,現在的最新版本是jython2.2。
這裡我以一個簡單的程式作為樣本來看看怎麼把python程式編譯為java的jar包。注意的是:並不是所有的python程式都能用jython來編譯,因為jython的版本滯後於python,且python的一些庫jython是不支援的(這些主要是c/c++寫的庫)。jython可以到http://www.jython.org去下載。
下面就是一段代碼,這個是jython帶的demo裡的,在jython22/Demo/swing下,檔案名稱叫TreeDemo.py :
data = {
'PyObject': {
'PyInteger':None,
'PyFloat':None,
'PyComplex':None,
'PySequence': {
'PyArray':None,
'PyList':None,
'PyTuple':None,
'PyString':None,
},
'PyClass': {
'PyJavaClass':None,
},
},
'sys':None,
'Py':None,
'PyException':None,
'__builtin__':None,
'ThreadState':None,
}
from pawt import swing
Node = swing.tree.DefaultMutableTreeNode
def addNode(tree, key, value):
node = Node(key)
tree.add(node)
if value is not None:
addLeaves(node, value.items())
def addLeaves(node, items):
items.sort()
for key, value in items:
addNode(node, key, value)
def makeTree(name, data):
tree = Node('A Few JPython Classes')
addLeaves(tree, data.items())
return tree
if __name__ == '__main__':
tree = makeTree('Some JPython Classes', data)
swing.test(swing.JScrollPane(swing.JTree(tree)))
如果直接運行這段程式,可以出來java的swing的一個顯示樹型結構的介面。當然執行的時候要用jython而不是python,最好是在命令列裡輸入:
jython TreeDemo.py
來執行。
下面看看怎麼編譯,首先要確認你有jdk, 如果是jdk 1.5以上的版本,這樣就不用設定CLASSPATH環境變數了。注意:jdk 1.4版本是要設定CLASSPATH的!就是設定CLASSPATH=.;C:/j2sdk1.4.1_03/lib;C:/j2sdk1.4.1_03/lib/tools.jar; 可能jdk1.5在某些情況下有一些問題,1.4則基本不會。編譯的過程都在命令列中進行。
jythonc -a -C "C:/Program Files/Java/jdk1.5.0_06/bin/javac.exe" -jar tree.jar TreeDemo.py
這樣就會產生一個叫 tree.jar 的包,以及一個叫jpywork的目錄,這個目錄是編譯過程用了的,編譯完了可以刪除。執行
java -jar tree.jar
就可以運行這個程式了。
這裡我以一個jython才能執行的程式為例介紹的,其實一個普通的只使用標準庫的python程式也是可以的。