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

2024-05-19 16:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用sidekit工具包进行说话人识别,我已经为Ubuntu安装了libsvm,我使用的是anaconda3.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

Tags: inpyimporthomeinitliblinesite
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_索引的文件!在

几个月前我安装Sidekit时也遇到了同样的问题。在

1:如果你想把Sidekit用于不涉及SVM的系统(gmm ubm,i-vectors等等),那么可以通过编辑__init__.py来避免这个问题。在您的案例中,它位于: /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)中,Sidekitdocumentation告诉您(在libsvm安装之后)将libsvm.so.2复制到.../python3.5/site-packages/sidekit/libsvm/。在

如果import sidekit仍然给出相同的错误,请检查.../python3.5/site-packages/sidekit/__init__.py的第125行,确保它显示libsvm = CDLL(os.path.join(dirname, 'libsvm.so.2'))

请注意,__init__.py和将被替换,如果您要更新Sidekit。在

相关问题 更多 >