【问题标题】:How to import Python modules with Maven in a Jython project?如何在 Jython 项目中使用 Maven 导入 Python 模块?
【发布时间】:2015-04-03 19:57:50
【问题描述】:

我正在编写一个 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 模块?任何指针都非常感谢:)

【问题讨论】:

    标签: python maven maven-plugin jython


    【解决方案1】:

    找到了我的问题的解决方案!它根本与Maven无关,可以通过修复jar文件中的PYTHONPATH来解决。我怀疑是这样,但认为可以通过 Maven 完成。我错了,它需要从 Jython 项目中的 Java 代码中完成。主要的 Java 类应该是这样的:

            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"));
    

    找到了库并且一切正常。我很高兴。

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 2016-06-12
      • 2021-04-19
      • 2015-10-06
      • 1970-01-01
      • 2014-01-02
      相关资源
      最近更新 更多