最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【记录】有空去试试Jython

Python crifan 5563浏览 0评论

【背景】

看到:

python(jython)与java结合实际中到底如何应用?

提到了Jython,看了看wiki的介绍:

Jython wiki

说是GUI可以直接用Swing,AWT,SWT等。

所以,打算有空去试试这个Jython,去写个简单的GUI,试试效果如何。

 

【折腾过程】

1.找到Jython主页,找到下载页面,跳转到

http://search.maven.org/#search|ga|1|g%3A%22org.python%22%20AND%20v%3A%222.5.3%22

随便下载了个.jar:

jython-2.5.3.jar

双击后,生成个cachedir文件夹。但是其他没任何反应了。

不知道如何使用。

2.还是要去官网看如何安装:

Jython Installation

才看到说明,原来是要下载jython_installer。

所以重新去下载到jython-installer-2.5.3.jar,按照安装提示,双击jython-installer-2.5.3.jar,

然后一步步安装:

install jython to select lan

license agreement for jython

install all for jython

select install path for jython

select home path for jython

install overview for jython

 

后来就安装完毕了。

Jython简介

然后接着是参考:

http://www.jython.org/currentdocs.html

看了:

The Jython Tutorial

大概明白了:

Jython出现的目的在于,让Python的模块,运行在JVM虚拟机上。

这样就使得如此强大通用的Python的库函数功能,都可以在Java中调用了。

 

而由于此移植工作,所涉及到的Python的库函数,和具体实现,基本没关系,所以也使得此移植成了可能。

Python和Jython基本都是一样的,最大不一样在于,Jython不支持C扩展(C Extension)。

因此,绝大多数的Python模块,除非其用到了C扩展,否则都可以实现,不经修改的,直接运行在Jython之上。

 

目前的理解是:

本身java代码 + JVM -> 可以正常运行;

用Python代码写的Python的各个模块 + Jython + JVM -> 可以正常运行

 

折腾Jython的具体使用

1.再去参考

Using Jython

貌似,最简单的用法就是:

jython myscript.py

所以,找到python脚本,比如之前:

【整理】【多图详解】如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDE

所用到的:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Function:
【整理】【多图详解】如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDE
https://www.crifan.com/how_to_do_python_development_under_windows_environment

Author:     Crifan Li
Version:    2012-12-06
"""

import platform;

pythonVersion = platform.python_version();
uname = platform.uname();

print "Just for demo how to do python development under windows:";
print "Current python version info is %s"%(pythonVersion);
print "uname=",uname;

然后到命令行下面运行,结果没有找到jython:

D:\tmp\tmp_dev_root\python\tutorial_summary\how_to_dev_python>jython demoRunPythonUnderWindows.py

‘jython’ is not recognized as an internal or external command,

operable program or batch file.

所以,看来需要添加环境变量。

2.参考:

1.2. Environment variables

去把JYTHON_HOME设置好:

added jython_home into environment variable

然后重新去命令行中运行,看看效果,结果错误依旧,还是找不到jython。

刚刚发现,原来jython安装根目录:

D:\tmp\dev_install_root\jython2.5.3

中已经有了对应的:

jython.bat

以及bin目录下,也有对应的jython.bat,所以,看来还是要去添加bin目录到path中才行:

added jython_home into path

 

提示:

【记录】Notepad++存在一个bug:通过Open current dir cmd方式打开的cmd,无法自动更新环境变量

 

最后,终于可以正常运行了:

D:\tmp\tmp_dev_root\python\tutorial_summary\how_to_dev_python>jython demoRunPythonUnderWindows.py

*sys-package-mgr*: processing new jar, ‘D:\tmp\dev_install_root\jython2.5.3\jython.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar’

*sys-package-mgr*: processing new jar, ‘D:\DevTool\DD_Parser\Parser\ANTLR\antlr\antlr-4.0-complete.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\resources.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\jsse.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\jce.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\charsets.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\jfr.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\ext\access-bridge-64.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\ext\dnsns.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\ext\jaccess.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\ext\localedata.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\ext\sunec.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\ext\sunjce_provider.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\ext\sunmscapi.jar’

*sys-package-mgr*: processing new jar, ‘C:\Program Files\Java\jdk1.7.0_11\jre\lib\ext\zipfs.jar’

Just for demo how to do python development under windows:

Current python version info is 2.5.3

uname= (‘Java’, ‘PC-CLI-1’, ‘1.7.0_11’, ‘Java HotSpot(TM) 64-Bit Server VM, 23.6-b04, Oracle Corporation’, ”, ”)

D:\tmp\tmp_dev_root\python\tutorial_summary\how_to_dev_python>

可以看出,其是先去找java的classpath,找到对应的jar包,然后慢慢去解析的。

其中,处理python代码的话,就是首当其冲的jython.jar了。

 

【总结】

之前,安装好了默认的windows平台的Python后,是通过:

python xxx.py

去通过,默认的,c语言版本的CPython,即python.exe去执行,去解析,python代码的。

 

现在,安装了jython后,通过

jython xxx.py

去通过,先调用Java版本的Python,Jython,即jython.jar,去解析python,然后转换成java所支持的字节码,最终调用java中的JVM,去执行python代码的

其中,此处的jython,windows下,是个对应的jython.bat,其中内部应该是对应的执行逻辑,调用对应的jar包去解析python的。

转载请注明:在路上 » 【记录】有空去试试Jython

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (4)

  1. 1.我在linux(ubuntu)下面试过,命令行使用jython直接运行py文件,还是提示无法找到jython.jar或者没有设置环境变量JYTHON_HOME。 我已经设置了JYTHON_HOME,PATH,甚至JYTHONPATH env里面相关环境变量的打印如下: JYTHON_HOME=~/jython2.5.4rc1 JYTHONPATH=:.:~/jython2.5.4rc1:~/jython2.5.4rc1/Lib:~/jython2.5.4rc1/jython.jar PATH=/home/apuser/bin:/usr/java/jdk1.7.0_51/bin:/usr/java/jdk1.7.0_51/jre/bin:/usr/java/jdk1.7.0_51/bin:/usr/java/jdk1.7.0_51/jre/bin:~/jython2.5.4rc1/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games CLASSPATH=:.:/usr/java/jdk1.7.0_51/lib:/usr/java/jdk1.7.0_51/jre/lib:~/jython2.5.4rc1/jython.jar 命令行的提示信息如下: apuser@jianzhangubtnb:~/workspace-sts34/jythonhello/src/jython254$ jython listing.py /home/apuser/jython2.5.4rc1/bin/jython: ~/jython2.5.4rc1 contains neither jython-dev.jar nor jython.jar. Try running this script from the 'bin' directory of an installed Jython or setting $JYTHON_HOME. apuser@jianzhangubtnb:~/workspace-sts34/jythonhello/src/jython254$ ls __init__.py listing.py 2. 我使用下面命令是可行的,就是觉得不大方便 java -jar jython.jar listing.py
    cajan211年前 (2014-03-23)回复
  2. 抱歉打扰一下,请问如果我用jython解析完python后,生成的字节码到了什么地方呢?呃我参照了Using jython的文档没有找到解决办法,在盘中搜索我原.py文件的文件名也没有找到,使用google也没有找到解决办法。。。。我需要用这个文件放到另一台只有JVM的机子上使用。诚盼解答,谢谢
    Rainy11年前 (2013-11-07)回复
90 queries in 0.199 seconds, using 22.19MB memory