把python程序用jython编译为java的jar包

    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程序也是可以的。

 

你可能感兴趣的:(java,jdk,python,swing,tree,jython)