独立Jython:导入错误(Apache POI)



Jython独立jar在我尝试将Jython与Apache POI一起使用时抛出ImportError异常。

下面你会发现我是如何称呼Jython脚本的:

java -cp C:jAutoMailerScriptlibpoi-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是否有任何限制?

提前感谢,

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

使用python.path系统属性应该有效:

java -Dpython.path=C:jAutoMailerScriptlibpoi-3.9-20121203.jar -jar jython.jar main.py

这里有一个替代命令:

java -cp C:jAutoMailerScriptlibpoi-3.9-20121203.jar;jython.jar org.python.util.jython main.py

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

使用已安装的Jython和jython命令运行良好:

jython -Dpython.path=C:jAutoMailerScriptlibpoi-3.9-20121203.jar main.py

请注意,独立的jython.jar包含标准库Python模块(位于Lib文件夹中)。这些模块不包括在安装jython后得到的jython.jar中。

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

我一直在尝试重现您的问题,在2.5.3版本的独立Jython中也遇到了同样的问题。也尝试过POI 3.7;仍然是一样的交易。我也试了一下阿尔沙德提出的系统性的建议。这里发生了一些特殊的事情(使用不同的库进行测试——这次是barcode4j):

c:developmentlocallibjython-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:developmentlocallibbarcode4j-2.0buildbarcode4j.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\libx08arcode4j-2.0x08uildx08arcode4j.jar']
>>>

看看路径是如何因为"\"分隔符而被加扰的?

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

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

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

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

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

java -Dpython.cachedir.skip=false -Dpython.cachedir=/tmp {...}

您可以尝试将jar附加到您的系统路径,如

sys.path.append('C:jAutoMailerScriptlibpoi-3.9-20121203.jar')

然后尝试运行相同的脚本。尽管最好使用操作系统模块来获取路径。我不确定在windows操作系统的jython中如何处理斜杠。

最新更新