背景 Jep 是一个在 Java 中调用 Python 的库,原理是通过 JNI 来调用 CPython。 Jep 支持 python 2.7, 3.3 - 3.7。 噢,为什么没有尝试下 Jython? 因为我这边需要用 Python3.x,目前 Jython 仅支持到 python 2.7.1。 初体验 编译 Py ..

Jep 初体验

本贴最后更新于 201 天前,其中的信息可能已经沧海桑田

背景

Jep 是一个在 Java 中调用 Python 的库,原理是通过 JNI 来调用 CPython。

Jep 支持 python 2.7, 3.3 - 3.7。

噢,为什么没有尝试下 Jython? 因为我这边需要用 Python3.x,目前 Jython 仅支持到 python 2.7.1。

初体验

编译 Python

需要也生成 .so 文件,故加上 --shared 参数

./configure --shared

需要编译时加上参数 -fPIC,故编辑 Makefile文件,修改为

CC=             gcc -pthread -fPIC
CXX=            g++ -pthread -fPIC

然后编译,安装

make
sudo make install

安装 jep

/usr/local/bin/pip3 install jep

代码

pom.xml

pom.xml

  <dependencies>
    <dependency>
      <groupId>black.ninia</groupId>
      <artifactId>jep</artifactId>
      <version>3.8.2</version>
    </dependency>
  </dependencies>

MainJep.java

package testJep;

import jep.Jep;
import jep.JepException;

public class MainJep {
  public static void main(String[] args) throws JepException {
    try (Jep jep = new Jep()) {
      jep.eval("from java.lang import System");
      jep.eval("s = 'Hello World'");
      jep.eval("System.out.println(s)");
      jep.eval("print(s)");
      jep.eval("print(s[1:-1])");
      
      jep.eval("import sys");
      jep.eval("sys.version_info");
    }
  }
}

运行

java -jar testJep-0.0.1-SNAPSHOT/testJep-0.0.1-SNAPSHOT.jar
Hello World
Hello World
ello Worl
sys.version_info(major=3, minor=7, micro=0, releaselevel='final', serial=0)

参考

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:PipeSoloSymWide 等,欢迎大家加入,贡献开源。

    1891 引用 • 3629 回帖 • 590 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    297 引用 • 433 回帖 • 674 关注
回帖   
请输入回帖内容...