2017-02-05 9 views
1

にpythonでsidekitをインポートするには、私は、話者認識のためのsidekitツールキットを使用するtyringていると私は、私はアナコンダ3.5を使用しているUbuntuのためLIBSVMをインストールしました。私はsidekitをインポートしようとすると、私はいくつかのヶ月前にSidekitをインストールしたとき、私は同じ問題を抱えていたインポートエラーエラーUbuntuの

>>> 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 
+0

ファイル '/ usr/lib/libsvm.so.3'がありますか?あるいは、Pythonは異なるバージョンの 'libsvm'を必要とするかもしれません。 – furas

+0

私は 'conda install -c conda-forge libsvm = 3.21'を使ってインストールしたこのファイル/usr/lib/libsvm.so.2を持っています –

+0

Pythonには' usr/lib/libsvm.so.3'が必要ですが、どのような違いがあるか知っています - 多分異なるバージョンのC/C++コンパイラでコンパイルされているかもしれません。 – furas

答えて

1

を以下ます。

1:SVM(gmm-ubm、i-vectorsなど)を使用しないシステムにSidekitを使用する場合は、__init__.pyを編集してlibsvmをインポートしないようにしてください。あなたの場合、それはここにあります: /home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/__init__.py。 行140(if libsvm_loaded:の直上)にlibsvm_loaded = Falseを追加すると、libsvmはインポートされません。

2:あなたは(例えばスクリプトrsr2015_svm_gmm.pyのように)SVMベースのシステムを作ることができるようにしたい場合は、Sidekit documentationは(LIBSVMインストール後)にあなたを伝えるには、.../python3.5/site-packages/sidekit/libsvm/libsvm.so.2をコピーします。

import sidekitはまだ同じエラーを与えた場合、ライン125 .../python3.5/site-packages/sidekit/__init__.pyのをチェックしていることを確認してください、それはあなたがSidekitを更新している場合__init__.pyと交換されることをlibsvm = CDLL(os.path.join(dirname, 'libsvm.so.2'))

注氏は述べています。

1

サイドキットをインポートしようとすると、まったく同じエラーが発生しました。私はPythonとapt-getの両方で見つけることができるすべてのlibsvmパッケージをインストールしようとしましたが、このエラーを修正できる唯一の方法は、ソースからlibsvmをダウンロードしてコンパイルすることでした。それが聞こえるほど悪くない - 小さなライブラリーは、コンパイルするのに5秒しかかかりませんでした。あなたはGitがインストールされていると仮定すると、

は(gitのコアをインストールapt-getを)、私が使用するコマンドのセット全体は以下の通りであった。

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言及ことを実現します。 - 私もそうしましたが、libsvm.soを使用しました。 私のために働いたので、svm_get_sv_indicesを含む唯一のファイルと思われます!