5

当我尝试将 Jython 与 Apache-POI 一起使用时,Jython 独立 jar 引发了 ImportError 异常。

您将在下面找到我如何调用我的 Jython 脚本:

java -cp C:\jAutoMailerScript\lib\poi-3.9-20121203.jar -jar jython.jar main.py

错误:

回溯(最近一次通话最后):

文件“main.py”,第 32 行,在

从 org.apache.poi.hssf.usermodel 导入 *

ImportError:没有名为 apache 的模块

这是第 32 行的代码:

from org.apache.poi.hssf.usermodel import *

为了使用 Java 的第三方应用程序,Jython 是否有任何限制?

提前致谢,

4

4 回答 4

7

您不能同时使用-cp-jar。该-jar选项会覆盖任何其他类路径设置。请参阅http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html

使用python.path系统属性应该可以工作:

java -Dpython.path=C:\jAutoMailerScript\lib\poi-3.9-20121203.jar -jar jython.jar main.py

这是一个替代命令:

java -cp C:\jAutoMailerScript\lib\poi-3.9-20121203.jar;jython.jar org.python.util.jython main.py

然而,事实证明这些命令都不适用于独立的 JythonImportError正如问题中所说,您会得到一个。有一个似乎相关的旧开放错误:http: //bugs.jython.org/issue1422(它说问题存在于 Solaris,但据我所知,它也适用于其他平台)。

使用已安装的 Jython并且该jython命令可以正常工作:

jython -Dpython.path=C:\jAutoMailerScript\lib\poi-3.9-20121203.jar main.py

请注意,独立的 jython.jar 包含标准库 Python 模块(在Lib文件夹中)。这些模块不包含在您随安装的 Jython 获得的 jython.jar 中。

我希望这个答案有所帮助,即使它可能无法完全解决您的问题。

于 2013-03-02T07:34:15.657 回答
3

我一直在尝试重现您的问题,但在独立 Jython 的 2.5.3 版本中遇到了同样的问题。还尝试使用 POI 3.7;还是一样的交易。我还尝试了 Arshad 提出的 sys.path.append 建议。这里发生了一些奇怪的事情(使用不同的库进行测试 - 这次是barcode4j):

c:\development\local\lib\jython-sa-2.5.3>java -jar jython-standalone-2.5.3.jar
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0_10
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\Lib', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\jython-standalone-2.5.3.jar\\Lib', '__classpath__', '__pyclasspath__/']
>>> sys.path.append('C:\development\local\lib\barcode4j-2.0\build\barcode4j.jar')
>>> sys.path
['', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\Lib', 'C:\\development\\local\\lib\\jython-sa-2.5.3\\jython-standalone-2.5.3.jar\\Lib', '__classpath__', '__pyclasspath__/', 'C:\\development\\local\\lib\x08arcode4j-2.0\x08uild\x08arcode4j.jar']
>>>

看看路径是如何因为 '\' 定界符而被打乱的?

(也尝试了 python.path 建议,但它给出了与您报告的相同的错误。)

可能是您遇到了这个报告的问题或类似/相关的问题吗?它似乎与场景(独立版本)和你我使用的版本相匹配。

于 2013-03-05T15:12:27.637 回答
3

使用 commons-lang3-3.1.jar 等的 jython 2.5.4-rc1 独立版也有同样的问题。我必须在独立模式下使用它,所以这非常令人沮丧!:-(

编辑:这个人想通了!为什么 Jython 拒绝找到我的 Java 包?

您必须添加以下标志才能使 Jython 独立运行!

java -Dpython.cachedir.skip=false -Dpython.cachedir=/tmp {...}
于 2013-07-29T22:33:47.100 回答
1

您可以尝试像这样将 jar 附加到您的系统路径

sys.path.append('C:\jAutoMailerScript\lib\poi-3.9-20121203.jar')

然后尝试运行相同的脚本。虽然使用 os 模块来获取路径会更好。我不确定如何在 Windows 操作系统上的 jython 中处理斜线。

于 2013-02-22T16:45:23.567 回答