无法在嵌入式 Jetty 中使用 Jython 导入“日志记录”模块 -> ImportError: no os specific module found

Posted

技术标签:

【中文标题】无法在嵌入式 Jetty 中使用 Jython 导入“日志记录”模块 -> ImportError: no os specific module found【英文标题】:Cannot import "logging" module using Jython in embedded Jetty -> ImportError: no os specific module found 【发布时间】:2010-08-07 19:42:33 【问题描述】:

我正在尝试在 Jetty 服务器(全部通过 Maven)中使用 Jython(嵌入)来调用简单的 Python 脚本。

只要我不尝试使用任何标准库(例如“日志记录”),我的脚本就可以正常工作。每当我尝试导入其中一个标准库时,它都会失败并出现异常“ImportError”。

我得到的例外是:

  File "<string>", line 1, in <module>
  File "c:\home\work\sample\content\helloworld\helloworld.py", line 10, in <module>
    import logging
  File "c:\home\work\sample\content\Lib\logging\__init__.py", line 29, in <module>
    import sys, os, types, time, string, cStringIO, traceback
  File "c:\home\work\sample\content\Lib\os.py", line 119, in <module>
    raise ImportError, 'no os specific module found'
ImportError: no os specific module found

    at org.python.core.PyException.fillInStackTrace(PyException.java:70)
    at java.lang.Throwable.<init>(Throwable.java:181)
    at java.lang.Exception.<init>(Exception.java:29)
    at java.lang.RuntimeException.<init>(RuntimeException.java:32)
    at org.python.core.PyException.<init>(PyException.java:46)
    at org.python.core.PyException.doRaise(PyException.java:200)
    at org.python.core.Py.makeException(Py.java:1159)
    at org.python.core.Py.makeException(Py.java:1163)
    at os$py.f$0(c:\home\work\sample\content\Lib\os.py:692)
    at os$py.call_function(c:\home\work\sample\content\Lib\os.py)
    at org.python.core.PyTableCode.call(PyTableCode.java:165)
    at org.python.core.PyCode.call(PyCode.java:18)
    at org.python.core.imp.createFromCode(imp.java:325)
    at org.python.core.imp.createFromPyClass(imp.java:144)
    at org.python.core.imp.loadFromSource(imp.java:504)
    at org.python.core.imp.find_module(imp.java:410)
    at org.python.core.imp.import_next(imp.java:620)
    at org.python.core.imp.import_first(imp.java:650)
    at org.python.core.imp.import_name(imp.java:741)
    at org.python.core.imp.importName(imp.java:791)
    at org.python.core.ImportFunction.__call__(__builtin__.java:1236)
    at org.python.core.PyObject.__call__(PyObject.java:367)
    at org.python.core.__builtin__.__import__(__builtin__.java:1207)
    at org.python.core.__builtin__.__import__(__builtin__.java:1190)
    at org.python.core.imp.importOne(imp.java:802)
    at logging$py.f$0(c:\home\work\sample\content\Lib\logging\__init__.py:1372)
    at logging$py.call_function(c:\home\work\sample\content\Lib\logging\__init__.py)
    at org.python.core.PyTableCode.call(PyTableCode.java:165)
    at org.python.core.PyCode.call(PyCode.java:18)
    at org.python.core.imp.createFromCode(imp.java:325)
    at org.python.core.imp.createFromPyClass(imp.java:144)
    at org.python.core.imp.loadFromSource(imp.java:504)
    at org.python.core.imp.find_module(imp.java:410)
    at org.python.core.imp.import_next(imp.java:620)
    at org.python.core.imp.import_first(imp.java:650)
    at org.python.core.imp.import_name(imp.java:741)
    at org.python.core.imp.importName(imp.java:791)
    at org.python.core.ImportFunction.__call__(__builtin__.java:1236)
    at org.python.core.PyObject.__call__(PyObject.java:367)
    at org.python.core.__builtin__.__import__(__builtin__.java:1207)
    at org.python.core.__builtin__.__import__(__builtin__.java:1190)
    at org.python.core.imp.importOne(imp.java:802)
    at helloworld.helloworld$py.f$0(c:\home\work\sample\content\helloworld\helloworld.py:19)
    at helloworld.helloworld$py.call_function(c:\home\work\sample\content\helloworld\helloworld.py)
    at org.python.core.PyTableCode.call(PyTableCode.java:165)
    at org.python.core.PyCode.call(PyCode.java:18)
    at org.python.core.imp.createFromCode(imp.java:325)
    at org.python.core.imp.createFromPyClass(imp.java:144)
    at org.python.core.imp.loadFromSource(imp.java:504)
    at org.python.core.imp.find_module(imp.java:410)
    at org.python.core.PyModule.impAttr(PyModule.java:109)
    at org.python.core.imp.import_next(imp.java:622)
    at org.python.core.imp.import_name(imp.java:761)
    at org.python.core.imp.importName(imp.java:791)
    at org.python.core.ImportFunction.__call__(__builtin__.java:1236)
    at org.python.core.PyObject.__call__(PyObject.java:367)
    at org.python.core.__builtin__.__import__(__builtin__.java:1207)
    at org.python.core.imp.importFromAs(imp.java:869)
    at org.python.core.imp.importFrom(imp.java:845)
    at org.python.pycode._pyx1.f$0(<string>:1)
    at org.python.pycode._pyx1.call_function(<string>)
    at org.python.core.PyTableCode.call(PyTableCode.java:165)
    at org.python.core.PyCode.call(PyCode.java:18)
    at org.python.core.Py.runCode(Py.java:1197)
    at org.python.core.Py.exec(Py.java:1241)
    at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:138)

我的脚本如下所示:

from java.util import Random
from java.util import Date

import sys

print(sys.path)
print(sys.builtin_module_names)

import logging

logging.basicConfig(level=logging.WARNING)
logger1 = logging.getLogger('aaa') 
logger1.warning('************* This message comes from one module') 

def say_hello():
        return 'hello world1'

到目前为止,我已经尝试了以下方法,但没有任何效果:

在我的类路径中包含“Lib”目录的 zip 在我设置解释器时对“Lib”路径进行硬编码。

如果我直接从交互式 Jython shell 执行此操作,则脚本可以正常工作(并显示一条日志消息)。

谢谢。

KJQ

【问题讨论】:

【参考方案1】:

我想现在我已经找到了我自己问题的答案......

基本上,我知道这与我的路径有关,但不知道该怎么做。

我最终通过安装程序创建了一个“独立”版本的 Jython jar(它包括 /Libs 目录)并使用它。

【讨论】:

以上是关于无法在嵌入式 Jetty 中使用 Jython 导入“日志记录”模块 -> ImportError: no os specific module found的主要内容,如果未能解决你的问题,请参考以下文章

Embedded Jetty 无法识别 Spring MVC 安全性

嵌入式 Jetty 中的 Web 应用程序出现错误 404 未找到

Jetty WebSocket 代理

在 maven jetty 7 插件中启用调试日志记录

为啥有人会使用 jetty-maven-plugin 与嵌入式码头

Java使用Jetty实现嵌入式Web服务器及Servlet容器