【发布时间】:2011-02-02 19:44:40
【问题描述】:
我正在开发一个散布着一堆 jython 和 java 代码的应用程序。由于程序的性质(使用 wsadmin),我们实际上仅限于 Python 2.1
我们目前有一个包含 java 源代码和 .py 模块的 jar。该代码当前使用 java 调用,但我想删除它以支持将尽可能多的功能迁移到 jython。
我遇到的问题是我想从调用 jython 脚本的现有 jar 文件中导入或执行 python 模块。我尝试了几种不同的方法都没有成功。
我的目录结构如下:
application.jar
|-- com
|--example
|-- action
|-- MyAction.class
|-- pre_myAction.py
我尝试的第一种方法是从 jar 中导入。我将 jar 添加到我的 sys.path 并尝试使用 import com.example.action.myAction 和 import myAction 导入模块。但是,即使我将 init.py 文件放入每个级别的目录中,也没有成功。
我尝试的第二种方法是使用 java 类加载资源。所以我写了下面的代码:
import sys
import os
import com.example.action.MyAction as MyAction
scriptName = str(MyAction.getResource('/com/example/action/myAction.py'))
scriptStr = MyAction.getResourceAsStream('/com/example/action/myAction.py')
try:
print execfile(scriptStr)
except:
print "failed 1"
try:
print execfile(scriptName)
except:
print "failed 2"
这两个都失败了。我现在有点茫然不知该如何进行。有什么想法吗?
干杯,
特雷弗
【问题讨论】:
-
scriptName和scriptStr的内容是什么? -
在 jar 文件中。当我调用 jython 时,它在类路径上。如果我打印 sys.path 你会在那里看到它。为了彻底,我尝试使用 sys.path.append() 将 jar 直接添加到代码中,但没有任何区别。
-
查看
zipimport(docs.python.org/library/zipimport.html) 和底部的示例。当您写init.py时,是指__init__.py,对吗?
标签: java python import jar jython