0

我正在使用 jep 在 java 中运行 python 脚本,我基本上需要运行使用 scikit 包的脚本。但是当我尝试运行时它向我显示错误,我无法理解。

这是我程序中的一段代码,Jep jep = new Jep(); jep.eval("导入 sklearn");

它显示了以下错误,但 sklearn 在 python 中运行良好。2016 年 7 月 6 日下午 5:31:50 JepEx 主要严重:空 jep.JepException:jep.JepException::/usr/local/lib/python2.7/dist-packages/sklearn/__check_build/_check_build.so:未定义符号: _PyThreadState_Current


/usr/local/lib/python2.7/dist-packages/sklearn/ check_build 的内容: setup.py __init .pyc _check_build.so build init .py setup.pyc


scikit-learn 似乎没有正确构建。

如果您已经从源代码安装了 scikit-learn,请不要忘记在使用它之前构建包:运行python setup.py installmake在源目录中。

如果您使用了安装程序,请检查它是否适合您的 Python 版本、操作系统和平台。在 jep.Jep.eval(Jep.java:485) 在 JepEx.executeCommand(JepEx.java:26) 在 JepEx.main(JepEx.java:38) 引起:jep.JepException: : /usr/local/lib/ python2.7/dist-packages/sklearn/__check_build/_check_build.so:未定义符号:_PyThreadState_Current


/usr/local/lib/python2.7/dist-packages/sklearn/ check_build 的内容: setup.py __init .pyc _check_build.so build init .py setup.pyc


scikit-learn 似乎没有正确构建。

如果您已经从源代码安装了 scikit-learn,请不要忘记在使用它之前构建包:运行python setup.py installmake在源目录中。

如果您使用了安装程序,请检查它是否适合您的 Python 版本、操作系统和平台。在 /usr/local/lib/python2.7/dist-packages/sklearn/check_build/__init .raise_build_error ( init .py : 41) 在 /usr/local/lib/python2.7/dist-packages/sklearn/check_build/ __init .( init .py:46) 在 /usr/local/lib/python2.7/dist-packages/sklearn/init .( init .py :56)

4

2 回答 2

1

_PyThreadState_Current 错误意味着它使用了错误的 Python。在启动进程之前,您应该能够通过将 PATH 和 LD_LIBRARY_PATH 设置为要使用的 python/bin 和 python/lib 目录(并针对其构建 Jep 和 sklearn)来修复它。这将确保 Python、Jep 和 sklearn 都使用相同的库。

如果这不起作用,则可能是 Jep 或 sklearn 是使用与您正在运行的不同版本的 Python 构建的。

于 2017-04-07T17:20:41.493 回答
0

我们遇到了同样的问题。
我们认为这是一个构建问题,并且由于重建 scikit-learn 并没有解决,我们最终使用预构建的Anacoda2使用 scikit-learn 。

于 2016-11-10T14:17:59.047 回答