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

Jep 初体验

背景

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 等,欢迎大家加入,贡献开源。

    2405 引用 • 3795 回帖 • 623 关注
  • Python

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

    255 引用 • 390 回帖 • 784 关注
感谢    关注    收藏    赞同    反对    举报    分享
回帖    
请输入回帖内容...