【问题标题】:Standalone Jython: Import Error (Apache-POI)独立 Jython:导入错误 (Apache-POI)
【发布时间】:2013-02-07 14:10:07
【问题描述】:

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

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

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

错误:

Traceback(最近一次通话最后一次):

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

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

ImportError: No module named apache

这是第 32 行的代码:

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

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

提前致谢,

【问题讨论】:

    标签: java apache-poi jython


    【解决方案1】:

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

    编辑:这个人想通了! Why does Jython refuse to find my Java package?

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

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

    【讨论】:

      【解决方案2】:

      您不能同时使用-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
      

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

      使用installed Jythonjython 命令可以正常工作:

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

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

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

      【讨论】:

      • 仍然抛出异常信息:ImportError.
      • 但是如果我想发布它以在另一台计算机上使用会发生什么?可以打包吗?
      • “基本安装”jython.jar 不包括捆绑在独立 jython.jar 中的标准库 Python 文件。这当然需要考虑。我不确定您的最佳解决方案是什么。
      【解决方案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 建议,但它给出的错误与您报告的相同。)

      可能是您遇到了this reported issue 或类似/相关的问题?它似乎与场景(单机版)和你我使用的版本相匹配。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • @Arshard_Ansari:它仍然无法正常工作......这与我正在使用的 jython 版本有什么关系吗? (Jython 独立 2.7b)
        猜你喜欢
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        • 2014-08-02
        • 2022-08-04
        • 2013-12-10
        • 2010-10-17
        相关资源
        最近更新 更多