3

次のコードを含むアプリケーションを取得できます。

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("import os");
interpreter.exec("import mylib");

以下は次のとおりですresources/Lib/mylib/__init__.py

from __future__ import print_function
from . import myfriend as thing
import os

print("Yep, everything works")

mavenを使用してコンパイルし、my-app-with-dependencies.jar

簡単に実行できjava -jar my-app-with-depenendencies.jar、問題なく動作します。

ここで悲しい部分が出てきます。これとまったく同じコードを Spring ハンドラー内に入れることができます。

@RequestMapping("/doesnotwork")
public @ResponseBody String sadness() {
    PythonInterpreter interpreter = new PythonInterpreter();
    interpreter.exec("import os");
    interpreter.exec("import mylib");  

    return "Quoth the Java, nevermore";
}

そして魔法のように、これはもはや機能しません。ちょっとじゃない。

ただし、ファイルを移動して動作させることはできます。しかし、内では、またはからインポートできなくなりました。できます。sys.path は次のようになります。resources/Lib/webapp/WEB-INF/lib/Lib/import mylibmylib__future__osimport sys

['/path/to/my/webapp/WEB-INF/lib/Lib', '__classpath__', '__pyclasspath__/']

sys.path_importer_cacheはこのように見えます:

{'__classpath__': <type 'org.python.core.JavaImporter'>,
 '/path/to/my/webapp/WEB-INF/lib/Lib': None, 
 '/path/to/my/webapp/WEB-INF/lib/Lib/mylib': None, 
 '__pyclasspath__/': <ClasspathPyImporter object at 0x2>}

stdlib をインポートできないというのは、何が間違っているのでしょうか? と/path/to/my/webapp/WEB-INF/libの両方が含まれます。これらのjarファイルを自分のパスに挿入しようとしましたが、サイコロはまだありません。jython-2.7-b1.jarjython-standalone-2.7-b1.jar

jython .jars にあるものを除いて、フォルダにある .jar ファイルからJavaクラスをインポートできます。たとえば、内部jython-2.7-b1.jarorg/python/apache/xml/serialize/Serializer.class. インポートできますorg.pythonが、存在するのはorg.python.__name__.

4

0 に答える 0