IDE内部的Jython ok,在IDE之外,"找不到特定于os的模块"?

时间:2015-01-15 14:27:57

标签: java python jar classloader jython

我已经让Jython解释器工作了。但是当从java 1.7u45更改为java 8时,它只在IDE中运行。

我的项目使用Jython2.5.3。所有标准的python模块都打包成一个zip文件并放在java类路径中。

现在Jython未能找到'os'报告:

Traceback (most recent call last):
  File "a.py", line 36, in <module>
    import b.c as c
  File "c.py", line 1, in <module>
    import os
  File "__pyclasspath__/os.py", line 132, in <module>
  ImportError: no os specific module found

我在从命令文件和IDE启动应用程序之间使用JVisualVM比较了VM设置。没有明显的差异。
我还将命令文件更改为使用JDK1.8.0(作为netbeans启动)而不是JRE1.8.0
我还更改了命令文件以运行IDE生成的.class文件,而不是生产jar 我还将“-XDebug”添加到命令文件版本以匹配IDE设置
使用VisualVM进行检查时:
= JVM完全相同,
= JVM参数正好相同(除了Netbeans有“Xrunjdwp”) =系统属性几乎相同:

  • 'java.library.path'相同
  • 'java.class.path'上的jars是相同的,虽然jars有不同的路径。
  • 但命令文件版本中缺少python.console.encoding = cp437(IDE如何引入此版本?)
  • user.dir不同

我不知道接下来要做什么/检查。希望有人有个主意。感谢

更新
似乎Jython内部变量'sys.builtin_module_names'是一个集合,内容在每个场景中都不同。 在IDE之外,'nt'和'jffi'缺失。 os.py引发异常“ImportError:找不到特定于os的模块”。 如果该集合不包含任何

  • POSIX
  • NT
  • OS2
  • CE
  • 里斯科斯
  • ibmi

更新2
发现它......原来Jython2.5.1混合了Jython2.5.3模块的拉链

1 个答案:

答案 0 :(得分:1)

原来,Jython2.5.1解释器与Jython2.5.3的标准模块压缩混合

之前我有解释器版本和zip-of-standard-modules混合,但这次解释器有次要版本,我没有看到它。