2010-08-07 54 views
0

我試圖在Jetty服務器(全部通過Maven)中使用Jython(嵌入式)來調用簡單的Python腳本。無法在嵌入式Jetty中使用Jython導入「logging」模塊 - > ImportError:找不到os特定模塊

只要我不嘗試使用任何標準庫(如「日誌記錄」),我的腳本就能正常工作。每當我嘗試導入其中一個標準庫時,它都會失敗,導致「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

回答

2

我覺得現在我已經找到了答案,以我自己的問題......

基本上,我知道它是與我的路徑,但無法弄清楚如何做他們。

我最終通過安裝程序(並且它包含/ Libs目錄)創建Jython jar的「獨立」版本並使用它。