问题描述
这是对上述问题的一个非常简单的阐述。
// main.java
public class Main {
public static void main(String[] args) {
System.out.println("\\\\ Interpreter \\\\");
test_terpreter();
System.out.println("\\\\ SystemState \\\\");
test_systate();
}
// test_terpreter
public static void test_terpreter() {
String package_path = "C:\\Users\\User\\Documents\\Programming\\Java\\far_away_package";
pythoninterpreter interpreter = new pythoninterpreter();
interpreter.exec(String.format("import sys; sys.path.append('%s');sys_path = sys.path;",package_path));
System.out.format("SYSPATH IS: %s\n",interpreter.get("sys_path").toString());
System.out.format("IN SPECIFIED PATH IS: %s\n",String.join(",",new File(package_path).list()));
try {
interpreter.exec(String.format("import sys;sys.path.append('%s');import MyModule;",package_path));
} catch (PyException e) {
System.out.println("ImportError: No module named MyModule (BY INTERPRETER)");
}
}
// test_systate
public static void test_systate() {
String package_path = "C:\\Users\\User\\Documents\\Programming\\Java\\far_away_package";
PySystemState sys = new PySystemState();
sys.path.append(Py.newString(package_path));
System.out.format("SYSPATH IS: %s\n",sys.path.toString());
System.out.format("IN SPECIFIED PATH IS: %s\n",new File(package_path).list()));
PyObject importer = sys.getBuiltins().__getitem__(Py.newString("__import__"));
try {
PyObject module = importer.__call__(Py.newString("MyModule"));
} catch (PyException e) {
System.out.println("ImportError: No module named MyModule (BY SYSTATE)");
}
}
}
鉴于上面的测试用例,运行脚本时,这是sysdout,
\\ Interpreter \\
SYSPATH IS: ['C:\\jython2.7.2\\Lib','__classpath__','__pyclasspath__/','C:\\jython2.7.2\\Lib\\site-packages','C:\\Users\\User\\Documents\\Programming\\Java\\far_away_package']
IN SPECIFIED PATH IS: MyModule.py
ImportError: No module named MyModule (BY INTERPRETER)
\\ SystemState \\
SYSPATH IS: ['C:\\jython2.7.2\\Lib','C:\\Users\\User\\Documents\\Programming\\Java\\far_away_package']
IN SPECIFIED PATH IS: MyModule.py
ImportError: No module named MyModule (BY SYSTATE)
这表明 Jython 解释器和 sys 状态都成功找到了模块;前提是系统路径经过专门更改,以便模块所在的文件夹位于 sys.path
中。
在此先感谢您的帮助!
附言我可以保证它会引发导入错误(如果有人可能怀疑捕获 PyException
可能意味着很多其他事情,这里是没有 catch 块的回溯
Exception in thread "main" Traceback (most recent call last):
File "<string>",line 1,in <module>
ImportError: No module named MyModule
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)