我使用jep在java中运行python脚本,我基本上需要运行使用scikit包的脚本。但是当我试图跑步时,它显示我的错误,这是我无法理解的。
这是我程序中的一段代码, Jep jep = new Jep(); jep.eval(" import 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:undefined symbol:_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 from source,请不要忘记
在使用它之前构建包:运行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:undefined symbol:_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 from source,请不要忘记
在使用它之前构建包:运行python setup.py install
或
源目录中的make
。
如果您使用过安装程序,请检查它是否适合您的安装程序 Python版本,您的操作系统和您的平台。 在/usr/local/lib/python2.7/dist-packages/sklearn/check_build/__init.raise_build_error(init.py:41) at /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)
答案 0 :(得分:1)
_PyThreadState_Current错误意味着它使用了错误的Python。您应该能够通过在启动进程之前将PATH和LD_LIBRARY_PATH设置为要使用的python / bin和python / lib目录(以及构建Jep和sklearn)来修复它。这将确保Python,Jep和sklearn都使用相同的库。
如果这不起作用,Jep或sklearn可能使用不同版本的Python构建,而不是你正在运行。
答案 1 :(得分:0)
我们遇到了同样的问题。
我们认为这是一个构建问题,因为重建scikit-learn没有解决,我们最终使用scikit-learn使用预构建的Anacoda2。