我的操作系统: Windows Server 2008 R2 Enterprise (64-bit)
安装Jython2.7步骤:
1. 安装 vc2008_vcredist_x86.exe (注意: 虽然操作系统是64位的,但Jython2.7依赖32位的VC9.0)
2. 安装 jdk-8u25-windows-x64.exe (注意: Jython2.7要求 >=JDK1.7,JDK1.8适合WIN7和WIN2k8, JDK1.6适合WINXP),安装路径不要包含空格和中文
3. 设置环境变量:JAVA_HOME, JRE_HOME, CLASSPATH, PATH
set JAVA_HOME=C:\Java\jdk1.8.0_25 set JRE_HOME=%JAVA_HOME%\jre set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar set PATH=%JAVA_HOME%\bin;%JRE_HOME%\bin;%PATH%
4. 重启并验证
javac -version
5. 安装 jython-installer-2.7.0.jar
打印帮助信息 java -jar jython-installer-2.7.0.jar --help 图形方式安装Jython2.7 java -jar jython-installer-2.7.0.jar 控制台方式安装Jython2.7 java -jar jython-installer-2.7.0.jar -console
6. 设置环境变量: JYTHON_HOME
set JYTHON_HOME=C:\jython2.7.0 set PATH=%JYTHON_HOME%\bin;%PATH%
7. 验证Jython
C:\jython2.7.0\bin>dir 驱动器 C 中的卷没有标签。 卷的序列号是 88D3-F4D5 C:\jython2.7.0\bin 的目录 2015/07/25 18:21 <DIR> . 2015/07/25 18:21 <DIR> .. 2015/07/25 18:20 95,087 easy_install-2.7.exe 2015/07/25 18:20 95,087 easy_install.exe 2015/04/29 02:25 1,236,153 jython.exe 2015/07/25 18:21 95,059 pip.exe 2015/07/25 18:21 95,059 pip2.7.exe 2015/07/25 18:21 95,059 pip2.exe 2015/04/29 02:25 2,459,136 python27.dll 7 个文件 4,170,640 字节 2 个目录 96,630,317,056 可用字节 C:\>jython Jython 2.7.0 (default:9987c746f838, Apr 29 2015, 02:25:11) [Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_25 Type "help", "copyright", "credits" or "license" for more information. >>> exit() C:\>
至此,Jython2.7已经安装完成。
如果未安装 vc2008_vcredist_x86.exe的话,运行 jython时会提示如下:
C:\>jython Error loading Python DLL: C:\JYTHON~1.0\bin\python27.dll (error code 14001)
建议:删除Jython2.7安装目录,安装 vc2008_vcredist_x86.exe后,再安装 jython-installer-2.7.0.jar
当使用 DEPENDS.EXE 查找目标依赖关系也无头绪的时候,通过 sxstrace 工具跟踪也许能发现些蛛丝马迹,我就是通过该工具确定了下面的依赖关系:
jython-installer-2.7.0.jar 依赖 vc2008_vcredist_x86.exe
python-2.7.9.amd64.msi 依赖 vc2008_vcredist_x64.exe
sxstrace 工具使用如下:
开启跟踪,按 Enter 停止跟踪 sxstrace trace -logfile:C:/TEMP/1.txt 生成分析日志 sxstrace trace -logfile:C:/TEMP/1.txt -outfile:C:/TEMP/2.txt
下面贴出 sxstrace 跟踪 Jython2.7运行时的报文,从日志中可以看出,其依赖32位的VC9.0
================= 开始生成激活上下文。 输入参数: Flags = 0 ProcessorArchitecture = Wow32 CultureFallBacks = zh-CN;zh-Hans;zh;en-US;en ManifestPath = C:\JYTHON~1.0\bin\python27.dll AssemblyDirectory = C:\JYTHON~1.0\bin Application Config File = ----------------- 信息: 正在解析清单文件 C:\JYTHON~1.0\bin\python27.dll。 信息: 指令清单定义标识是 (null)。 信息: 参考: Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" 信息: 正在解析参考 Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。 信息: 正在解析 ProcessorArchitecture WOW64 的参考。 信息: 正在解析区域性 Neutral 的参考。 信息: 正在应用绑定策略。 信息: 未找到发布服务器策略。 信息: 未找到绑定策略重定向。 信息: 开始程序集探测。 信息: 未找到 WinSxS 中的程序集。 信息: 尝试在 C:\Windows\assembly\GAC_32\Microsoft.VC90.CRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.DLL 上探测指令清单。 信息: 未找到区域性 Neutral 的指令清单。 信息: 结束程序集探测。 信息: 正在解析 ProcessorArchitecture x86 的参考。 信息: 正在解析区域性 Neutral 的参考。 信息: 正在应用绑定策略。 信息: 未找到发布服务器策略。 信息: 未找到绑定策略重定向。 信息: 开始程序集探测。 信息: 未找到 WinSxS 中的程序集。 信息: 尝试在 C:\Windows\assembly\GAC_32\Microsoft.VC90.CRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.DLL 上探测指令清单。 信息: 尝试在 C:\JYTHON~1.0\bin\Microsoft.VC90.CRT.DLL 上探测指令清单。 信息: 尝试在 C:\JYTHON~1.0\bin\Microsoft.VC90.CRT.MANIFEST 上探测指令清单。 信息: 尝试在 C:\JYTHON~1.0\bin\Microsoft.VC90.CRT\Microsoft.VC90.CRT.DLL 上探测指令清单。 信息: 尝试在 C:\JYTHON~1.0\bin\Microsoft.VC90.CRT\Microsoft.VC90.CRT.MANIFEST 上探测指令清单。 信息: 未找到区域性 Neutral 的指令清单。 信息: 结束程序集探测。 错误: 无法解析参考 Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。 错误: 生成激活上下文失败。 结束生成激活上下文。
下面贴出 sxstrace 跟踪 Python2.7安装时的报文,从日志中可以看出,其依赖64位的VC9.0
================= 开始生成激活上下文。 输入参数: Flags = 0 ProcessorArchitecture = AMD64 CultureFallBacks = zh-CN;zh-Hans;zh;en-US;en ManifestPath = C:\Python27\python.exe AssemblyDirectory = C:\Python27 Application Config File = ----------------- 信息: 正在解析清单文件 C:\Python27\python.exe。 信息: 指令清单定义标识是 (null)。 信息: 参考: Microsoft.VC90.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" 信息: 正在解析参考 Microsoft.VC90.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。 信息: 正在解析 ProcessorArchitecture amd64 的参考。 信息: 正在解析区域性 Neutral 的参考。 信息: 正在应用绑定策略。 信息: 未找到发布服务器策略。 信息: 未找到绑定策略重定向。 信息: 开始程序集探测。 信息: 未找到 WinSxS 中的程序集。 信息: 尝试在 C:\Windows\assembly\GAC_64\Microsoft.VC90.CRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.DLL 上探测指令清单。 信息: 尝试在 C:\Python27\Microsoft.VC90.CRT.DLL 上探测指令清单。 信息: 尝试在 C:\Python27\Microsoft.VC90.CRT.MANIFEST 上探测指令清单。 信息: 尝试在 C:\Python27\Microsoft.VC90.CRT\Microsoft.VC90.CRT.DLL 上探测指令清单。 信息: 尝试在 C:\Python27\Microsoft.VC90.CRT\Microsoft.VC90.CRT.MANIFEST 上探测指令清单。 信息: 未找到区域性 Neutral 的指令清单。 信息: 结束程序集探测。 错误: 无法解析参考 Microsoft.VC90.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。 错误: 生成激活上下文失败。 结束生成激活上下文。
Jython2.7应用场景:
Jython导入wl.py模块后,通过WLST脚本语言可以与WebLogic进行实时交互。
确保WebLogic已启动,然后执行如下代码:
@ECHO OFF SETLOCAL set WL_HOME=C:\Oracle\Middleware\wlserver_10.3 call "%WL_HOME%\server\bin\setWLSEnv.cmd" @REM NO SSL @REM java weblogic.WLST helloworld.py @REM SSL java -Dweblogic.security.SSL.ignoreHostnameVerification=true ^ -Dweblogic.security.TrustKeyStore=DemoTrust ^ weblogic.WLST ^ helloworld.py ENDLOCAL
helloworld.py代码如下:
#!/usr/bin/env jython # -*- coding: utf-8 -*- import os import wl import sys sys.path.append(‘C:\\jython2.7.0\\Lib‘) sys.path.append(‘C:\\jython2.7.0\\Lib\\site-packages‘) username=‘weblogic‘ password=‘12345678‘ # NO SSL #wl.connect(username, password, ‘t3://localhost:7001‘) # SSL wl.connect(username, password, ‘t3s://localhost:7002‘) wl.disconnect()
目前,发现一个问题:当仅仅是 jython 启动后,其所有模块都是可以导入的,但是,当通过 java weblogic.WLST helloworld.py 方式启动后,部分 jython自带的模块就无法正常导入,详见我发的帖子:http://segmentfault.com/q/1010000003003164