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

这是我程序中的代码
Jep jep =新的Jep();
jep.eval(“ import sklearn”);

它显示以下错误,但是sklearn在python中工作得很好。
2016年7月6日5:31:50 JepEx main
严重:null
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
建立init.py setup.pyc



似乎scikit-learn的构建不正确。

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

如果您使用过安装程序,请检查它是否适合您
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
建立init.py setup.pyc



似乎scikit-learn的构建不正确。

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

如果您使用过安装程序,请检查它是否适合您
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)

最佳答案

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

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

08-24 12:21
查看更多