मैंने एक डिफ़ॉल्ट मावेन जावा प्रोजेक्ट बनाया और निम्नलिखित निर्भरता को जोड़ा:

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

फिर मैंने एक पैकेज src/main/java/mypkg बनाया और इस वर्ग को जोड़ा:

package mypkg;

import javax.script.*;

class JythonMinimalTest {
    public static void main(String[] args) throws Exception {
        String engineName = "python";
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName(engineName);
        if (engine == null) {
            System.err.println("ERROR: `" + engineName + "` not available.");
            System.err.println("Available engines: ");
            for (ScriptEngineFactory factory: manager.getEngineFactories()) {
                System.err.println(factory);
                System.err.println("names:");
                for (String name: factory.getNames()) {
                    System.err.println("  " + name);
                }
            }
            System.exit(999);
        }
        engine.eval("print('hello, world')");
    }
}

जब मैं इसे 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 को सूचीबद्ध करता है।

नैशॉर्न ने ठीक उसी तरह से ठीक काम किया। मैं ज्योथन के साथ क्या गलत कर रहा हूँ?

1
Andrey Tyukin 16 अक्टूबर 2018, 01:12

2 जवाब

इसे ठीक करने का एक तरीका यह है कि env var jythonpath को उस विशिष्ट Lib निर्देशिका को शामिल करने के लिए सेट करें जिसकी आपको अपने उदाहरण के लिए आवश्यकता है (और Lib\site-packages को भी शामिल करें ताकि विशिष्ट पैकेजों के साथ आगे की समस्याओं से बचा जा सके)

0
roetzi 22 जून 2019, 07:22

जैसा कि आप पहले ही खोज चुके हैं, आपको या तो अजगर विकल्पों के साथ importSite को अक्षम करना होगा। या, python.home को उस स्थान पर सेट करें जहां आपने jython निकाला है। मैंने इसे अपने होम फोल्डर में jython2.7.0 के तहत निकाला है; इसे जोड़ना,

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

अजगर को सही PYPATH खोजने की अनुमति देता है ताकि वह अजगर वातावरण का निर्माण कर सके।

1
Elliott Frisch 15 अक्टूबर 2018, 22:31