由“getEngineFactories”列出的Jython,但“getEngineByName(“Jython”)`为“null”`

2024-09-30 10:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个默认的Maven Java项目,并添加了以下依赖项:

<dependency>
  <groupId>org.python</groupId>
  <artifactId>jython</artifactId>
  <version>2.7.0</version>
</dependency>

然后我创建了一个包src/main/java/mypkg,并添加了这个类:

^{pr2}$

当我使用exec:java运行它时

mvn exec:java -Dexec.mainClass=mypkg.JythonMinimalTest

我得到以下神秘的输出:

ERROR: `python` not available.
Available engines: 
org.python.jsr223.PyScriptEngineFactory@2b0e6c89
names:
  python
  jython
jdk.nashorn.api.scripting.NashornScriptEngineFactory@46618cb8
names:
  nashorn
  Nashorn
  js
  JS
  JavaScript
  javascript
  ECMAScript
  ecmascript

管理器返回null,但在下一行中列出可用脚本引擎中的python/jython。在

纳肖恩用同样的方法工作得很好。我和Jython怎么了?在


Tags: 项目orgsrcnamesversionjythonjavadependency
3条回答

您要么需要使用python选项禁用importSite,正如您已经发现的那样。或者,将python.home设置为提取jython的位置。我把它提取到我的主文件夹中jython2.7.0;添加这个

System.setProperty("python.home", new File(
        System.getProperty("user.home"), "jython2.7.0").getPath()
);

允许python发现正确的PYPATH,以便它可以构建python环境。在

这里有一个解决方法:

在顶部添加:

import org.python.core.Options;

在调用getEngineByName之前,设置

^{pr2}$

这样引擎就不会出问题了。在

this conversation得到解决方案。在


另一个有效的解决方案(由mzjn在评论中提出)是用jython-standalone替换{}工件。在

解决此问题的一种方法是设置env var jythonpath以包含实例所需的特定Lib目录(并包括Lib\site-packages以避免特定包的进一步问题)

相关问题 更多 >

    热门问题