我可以使用JNI调用Python库吗?

时间:2014-02-23 12:49:09

标签: java python c++ java-native-interface

我知道有jython解决方案,但是jython无法加载wtxl和rdxl;它只能加载有限的pip库。所以我想写JNI去做。

主要程序如下: Java< - > JNI< - > C / C ++ Python接口< - >本地Python环境< - >我的html2excel python库

问题是它无法导入html2excel库。我使用C / C ++代码:

int to_excel(const std::string & htmlfile)
{
    Py_Initialize();
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('/home/allen/python')");
    PyObject *html2excelModule = PyImport_ImportModule("html2excel");
    if (!html2excelModule )
    {
        std::cerr << "Error: open python html2excel failed" << std::endl;
        Py_Finalize();
        return -1;
    }
    ...
}

以上程序告诉我这个错误

  

ImportError:没有名为html2excel的模块

html2excel.py位于/ home / allen / python中。从shell运行时没关系。

$python
>>>import sys
>>>sys.path.append('/home/allen/python')
>>>import html2excel

为什么我的JNI库无法导入现有的html2excel模块?提前谢谢!

1 个答案:

答案 0 :(得分:0)

错误消息显示rlm_python:EXCEPT :: /usr/lib/python2.7/lib-dynload/_io.so:unfined defined symbol:_Py_ZeroStruct

libpython2.7.so应该在JNI实现中使用dlopen手动加载。

详细解决方案为https://github.com/FreeRADIUS/freeradius-server/pull/415