【问题标题】:Error in importing sidekit in python on ubuntu在 ubuntu 上的 python 中导入 sidekit 时出错
【发布时间】:2017-06-22 08:47:03
【问题描述】:

我很想使用 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

【问题讨论】:

  • 你有文件/usr/lib/libsvm.so.3 吗?或者 Python 可能需要不同版本的 libsvm
  • 我有这个文件 /usr/lib/libsvm.so.2 我使用 conda install -c conda-forge libsvm=3.21 安装的
  • Python 需要 usr/lib/libsvm.so.3 但我不知道有什么区别 - 也许它是不同的版本,它是用不同的 C/C++ 编译器编译的。
  • O 也许 conda 安装了正确的库,但在不同的文件夹中。也许使用命令find 来查找所有libsvm.so 文件。

标签: python ubuntu libsvm sidekit


【解决方案1】:

我在尝试导入 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 的文件!

【讨论】:

    【解决方案2】:

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

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

    2:如果您希望能够制作基于 SVM 的系统(例如在示例脚本 rsr2015_svm_gmm.py 中),Sidekit documentation 会告诉您(在安装 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,将被替换。

    【讨论】:

      猜你喜欢
      • 2017-10-20
      • 2017-10-20
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 2018-04-26
      相关资源
      最近更新 更多