【问题标题】:How do I share common Python/Jython code between a Python and Java project with Pydev/Eclipse?如何使用 Pydev/Eclipse 在 Python 和 Java 项目之间共享通用 Python/Jython 代码?
【发布时间】:2011-07-26 00:46:27
【问题描述】:

我正在使用嵌入在 Java 项目中的 Jython 脚本,该脚本是在安装了 Pydev 的 Eclipse 中开发的。现在我想在另一个纯 Python 项目中重用这个脚本。有没有办法在不复制脚本的情况下干净地做到这一点?

目前,我有一个 Java 项目,其中包含目录 src/(包含 Java 源代码)和 src-py/(包含 Jython 源代码)并添加了 Pydev 'facet'。 Java 代码调用 Jython 代码,如下所示:

// evaluate the Jython class
PythonInterpreter interpreter = new PythonInterpreter();
InputStream resourceAsStream = MyEclipsePlugin.getResource("/src-py/MyJythonCode.py");
interpreter.execfile(resourceAsStream);

// create an instance of the Jython class and retrieve a Java interface reference to it
interpreter.exec("x = MyJythonClass()");   // MyJythonClass implements MyJavaInterface
Object x = interpreter.get("x").__tojava__(MyJavaInterface.class);
return (MyJavaInterface) x;

这行得通,但它显然很丑陋。根据我的阅读,曾经有一个“jythonc”——它可能更接近我的需要——但它似乎已被弃用,并且不鼓励你使用它。没有它,我需要在运行时将实际的 Jython 源代码编译成 JVM 类。因此,上面的模式,不幸的是似乎不支持加载模块,所以我目前正在处理单个 .py 文件中的所有内容。我想我最终可能会多次执行interpreter.execfile(),但是当模块之间存在相互依赖关系时,我还没有真正弄清楚如何做到这一点。

接下来,我尝试创建一个新的 Jython 项目来将我的 MyJythonCode.py 移动到其中。不幸的是,我无法将 Pydev/Jython 项目添加为对 Java 项目的项目引用,因此我不确定如何将其集成到 Java 项目中。

目前看到的选项,我都不喜欢:

  • 复制 MyJythonCode.py 并同时修改它们。
  • 做一些时髦的 svn:externals 东西,在每次更新时为我做复制。
  • 尝试为 Eclipse 找到一个预构建/自定义构建步骤插件来进行复制。

有人有更好的主意吗?

【问题讨论】:

  • 您的 IDE 和 VCS 可以处理符号链接吗?
  • @Thomas 那将是提到的 svn:externals 解决方案。在新的开发人员机器上设置项目时,每个基于 IDE 或 OS 的解决方案都意味着额外的步骤,我真的很想避免。

标签: python eclipse jython pydev


【解决方案1】:

我认为正确的做法是为这两者都依赖的内容建立一个单独的项目......

即:

将该项目创建为 java 项目,然后将 pydev 属性添加到其中(即:右键单击项目 > pydev > 设置为 pydev 项目)。

然后,在该项目中,您可以创建 java-wrapper 类并配置 pydev 的源路径(并将该项目添加为其他项目的引用:右键单击其他项目 > 属性 > 项目引用)。

这样,java/python 都应该正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2017-10-19
    • 2011-04-08
    • 2012-11-11
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多