Jython 通过更改 PyInterpreter 和 PySystemState 中的 sys.path 导入模块仍然引发导入错误

问题描述

这是对上述问题的一个非常简单的阐述。

我有一个由以下代码组成的 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: %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 (将#修改为@)