如何在 Jython 项目中使用 Maven 导入 Python 模块?
How to import Python modules with Maven in a Jython project?
我正在编写一个 Jython 项目来创建一个文本编辑器。数据模型完全用 Python 编写,并使用外部库,如 nose、jinja 和 ply。文本编辑器的 GUI 使用 Java 个 Swing 库。我正在尝试使用 Maven 构建此项目,并发现了 this useful plugin,我已将其包含在我的 pom 文件中,如下所示:
<plugin>
<groupId>net.sf.mavenjython</groupId>
<artifactId>jython-compile-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jython</goal>
</goals>
</execution>
</executions>
<configuration>
<libraries>
<param>nose</param>
<param>ply</param>
<param>jinja</param>
</libraries>
</configuration>
</plugin>
当我 mvn package
项目时,我得到一条成功构建的消息和一个 jar,所有 Python 模块都保存在上面的 Maven 插件创建的文件夹中 target/classes/Lib.到目前为止一切顺利,但是当我尝试 运行 jar 时,我无法让我的 Python 代码找到 Python 库并收到此错误消息:
java -jar target/text_editor-0.0.1-SNAPSHOT.jar
Exception in thread "main" Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<string>", line 2, in <module>
File "__pyclasspath__/text_editor/main.py", line 13, in <module>
File "__pyclasspath__/pymodel/pyfile.py", line 1, in <module>
File "__pyclasspath__/pymodel/pyflex.py", line 1, in <module>
ImportError: No module named ply
错误行是import ply.lex as lex
我的插件配置还有什么需要做的吗?或者我需要在 POM 文件中添加其他内容来构建链接?我不是 Maven 专家,所以我可能错过了一些对其他人来说显而易见的事情。还有其他方法可以使用 Maven 在 Jython 项目中导入 Python 模块吗?非常感谢任何指点:)
找到了我的问题的解决方案!它根本与 Maven 无关,可以通过修复 jar 文件中的 PYTHONPATH 来解决。我怀疑是这样,但认为可以通过 Maven 完成。我错了,它需要从 Jython 项目中的 Java 代码来完成。主 Java class 应该是这样的:
PySystemState systemState = Py.getSystemState();
只是在 systemState target/classes/Lib 中添加我的 Maven jython 插件下载的库的路径,如下所示:
//Link some external python libraries installed via maven plugin
systemState.path.append(new PyString("target/classes/Lib"));
找到了库,一切正常。我很高兴。
我正在编写一个 Jython 项目来创建一个文本编辑器。数据模型完全用 Python 编写,并使用外部库,如 nose、jinja 和 ply。文本编辑器的 GUI 使用 Java 个 Swing 库。我正在尝试使用 Maven 构建此项目,并发现了 this useful plugin,我已将其包含在我的 pom 文件中,如下所示:
<plugin>
<groupId>net.sf.mavenjython</groupId>
<artifactId>jython-compile-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jython</goal>
</goals>
</execution>
</executions>
<configuration>
<libraries>
<param>nose</param>
<param>ply</param>
<param>jinja</param>
</libraries>
</configuration>
</plugin>
当我 mvn package
项目时,我得到一条成功构建的消息和一个 jar,所有 Python 模块都保存在上面的 Maven 插件创建的文件夹中 target/classes/Lib.到目前为止一切顺利,但是当我尝试 运行 jar 时,我无法让我的 Python 代码找到 Python 库并收到此错误消息:
java -jar target/text_editor-0.0.1-SNAPSHOT.jar
Exception in thread "main" Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<string>", line 2, in <module>
File "__pyclasspath__/text_editor/main.py", line 13, in <module>
File "__pyclasspath__/pymodel/pyfile.py", line 1, in <module>
File "__pyclasspath__/pymodel/pyflex.py", line 1, in <module>
ImportError: No module named ply
错误行是import ply.lex as lex
我的插件配置还有什么需要做的吗?或者我需要在 POM 文件中添加其他内容来构建链接?我不是 Maven 专家,所以我可能错过了一些对其他人来说显而易见的事情。还有其他方法可以使用 Maven 在 Jython 项目中导入 Python 模块吗?非常感谢任何指点:)
找到了我的问题的解决方案!它根本与 Maven 无关,可以通过修复 jar 文件中的 PYTHONPATH 来解决。我怀疑是这样,但认为可以通过 Maven 完成。我错了,它需要从 Jython 项目中的 Java 代码来完成。主 Java class 应该是这样的:
PySystemState systemState = Py.getSystemState();
只是在 systemState target/classes/Lib 中添加我的 Maven jython 插件下载的库的路径,如下所示:
//Link some external python libraries installed via maven plugin
systemState.path.append(new PyString("target/classes/Lib"));
找到了库,一切正常。我很高兴。