在ubuntu上导入python中的sidekit时出错

时间:2017-02-05 09:16:56

标签: python ubuntu libsvm sidekit

我正在使用 sidekit 工具包进行说话人识别,我已经为Ubuntu安装了 libsvm ,我正在使用anaconda 3.5。当我尝试导入 sidekit 时,我收到以下导入错误

>>> import sidekit
>>> import theano
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/__init__.py", 
line 141, in <module>
from sidekit.libsvm import *
File "/home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/libsvm/__init__.py", 
line 37, in <module>
from sidekit.libsvm.svm import *
File "/home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/libsvm/svm.py", 
line 324, in <module>
fillprototype(libsvm.svm_get_sv_indices, None, [POINTER(svm_model), POINTER(c_int)])
File "/home/shivam/anaconda3/lib/python3.5/ctypes/__init__.py", line 360, in __getattr__
func = self.__getitem__(name)
File "/home/shivam/anaconda3/lib/python3.5/ctypes/__init__.py", line 365, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /usr/lib/libsvm.so.3: undefined symbol: svm_get_sv_indices

2 个答案:

答案 0 :(得分:2)

尝试导入sidekit时,我也遇到了同样的错误。我尝试安装我能找到的每个libsvm包(包括Python和apt-get),但我能解决这个错误的唯一方法是从源代码下载并编译libsvm。它没有听起来那么糟糕 - 它似乎是一个很小的库 - 只需要5秒就可以编译。

假设你安装了git(apt-get install git-core),我使用的命令总数是:

cd ~/ && \
git clone https://github.com/cjlin1/libsvm.git && \
cd libsvm && \
make && \
cd python && \
make && \
cp ~/libsvm/libsvm.so.2 /usr/local/lib/python3.5/dist-packages/sidekit/libsvm/ && \
rm -rf ~/libsvm

注意:我意识到你的错误提到了libsvm.so。 3 - 我也这样做了,但是使用libsvm.so。 2 工作了对我来说......所以这似乎是唯一包含svm_get_sv_indices的文件!

答案 1 :(得分:1)

几个月前我安装Sidekit时出现了同样的问题。

1:如果你想将Sidekit用于不涉及SVM的系统(gmm-ubm,i-vectors等),那么你可以通过编辑__init__.py来不导入libsvm来避免这个问题。在您的情况下,它位于: /home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/__init__.py。 在第140行(libsvm_loaded = False上方)添加if libsvm_loaded:,并且不会导入libsvm。

2:如果您希望能够创建基于SVM的系统(例如在示例脚本rsr2015_svm_gmm.py中),Sidekit documentation会告诉您(在安装libsvm之后)复制{{1进入libsvm.so.2

如果.../python3.5/site-packages/sidekit/libsvm/仍然出现同样的错误,请检查import sidekit的第125行并确保其显示.../python3.5/site-packages/sidekit/__init__.py

请注意libsvm = CDLL(os.path.join(dirname, 'libsvm.so.2')),如果您要更新Sidekit,将会替换它。