python文件转换成jar包_把python程序用jython编译为java的jar包 | 学步园

本文介绍了如何使用Jython将Python程序编译为Java的JAR包。由于Jython的特性,它可以让Python程序与Java类库结合。然而,不是所有Python程序都适用于Jython,因为它不支持所有Python库。通过示例代码`TreeDemo.py`,演示了编译和运行过程,包括设置JDK环境、使用`jythonc`编译和运行生成的JAR包。
摘要由CSDN通过智能技术生成

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,

}frompawtimportswing

Node=swing.tree.DefaultMutableTreeNodedefaddNode(tree, key, value):

node=Node(key)

tree.add(node)ifvalueisnotNone:

addLeaves(node, value.items())defaddLeaves(node, items):

items.sort()forkey, valueinitems:

addNode(node, key, value)defmakeTree(name, data):

tree=Node('A Few JPython Classes')

addLeaves(tree, data.items())returntreeif__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程序也是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值