【发布时间】:2013-02-13 20:15:19
【问题描述】:
我正在构建 Java 到 Jython 桥接类。 我要解决的任务是让 Jython 在我的应用程序工作目录(也称为程序执行目录)中查找 python 模块。
我通过将 System.getProperty("user.dir") 值附加到 sys.path 来做到这一点:
pySysState = new PySystemState();
//add working directory into sys.path
pySysState.path.append(new PyString(System.getProperty("user.dir")));
log_.info("Jython sys state initialized. sys.path: " + this.pySysState.path);
我得到 ImportError 异常:
python module 'user_module' was not found. sys.path: ['<other jars>\\Lib', '/<path to jython>/Lib', '__classpath__', '__pyclasspath__/', 'C:\\Users\\vvlad\\IDEAProjects\\transform']
ImportError: No module named scheduled_helper
at org.python.core.Py.ImportError(Py.java:290)
at org.python.core.imp.import_first(imp.java:750)
at org.python.core.imp.import_name(imp.java:834)
...
C:\\Users\\vvlad\\IDEAProjects\\transform 是应用程序目录。
在sys.path 中看起来像这样:
当我在 Jython 注册表 python.path 变量中手动指定工作目录的完整路径时,导入工作正常。而sys.path 看起来不一样:
>>sys.path: ['C:\\Users\\vvlad\\IDEAProjects\\transform', '<other jars path>\\Lib', '/<path to jython>/jython-2.5.2.jar/Lib', '__classpath__', '__pyclasspath__/', ]
所以当工作目录作为sys.path 中的第一个条目时,导入工作正常。但是当工作目录是最后一个条目时失败。
我正在使用 Jython 2.5.2 并从 IntelliJ IDEA 环境在 Windows 机器上运行测试。
对我来说,B 计划是在初始化 PySysState 之前将 Jython 注册表 python.path 设置为 user.dir 值 - 但这会引入一些隐藏行为。
【问题讨论】:
标签: java jython importerror jython-2.5 sys.path