#java #python-2.7 #frameworks #jython #jython-2.7
Вопрос:
Вот очень простая разработка указанной проблемы.
У меня есть один main.java сценарий, состоящий из следующего кода;
// 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: %sn", interpreter.get("sys_path").toString());
System.out.format("IN SPECIFIED PATH IS: %sn", 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: %sn", sys.path.toString());
System.out.format("IN SPECIFIED PATH IS: %sn", String.join(", ", 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', '__classpath__', '__pyclasspath__/', 'C:\Users\User\Documents\Programming\Java\far_away_package']
IN SPECIFIED PATH IS: MyModule.py
ImportError: No module named MyModule (BY SYSTATE)
Это демонстрирует, что ни интерпретатор Jython, ни состояние системы не смогли успешно найти модуль; при условии, что системный путь был изменен специально для того, чтобы папка, в которой находится модуль, находилась внутри sys.path
.
Я также распечатал содержимое указанной папки, чтобы убедиться, что файл действительно существует.
Заранее спасибо за любую помощь!
P.S. Я могу гарантировать, что это вызывает ошибку импорта как таковую (если кто-то может подозревать, что перехват PyException
может означать много других вещей, вот обратная связь без блока перехвата
Exception in thread "main" Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named MyModule