在CentOs 5.5上为Python-2.7.1构建libsvm-3.0的问题

0 投票
1 回答
845 浏览
提问于 2025-04-16 12:29

我在CentOs 5.5上尝试为一个不同的Python版本(python-2.7.1,而不是默认的2.4)安装libsvm-3.0。这个Python安装在/opt/python2.7目录下。我下载了源文件,然后在主目录和python子目录下运行了MAKE命令。接着,我把所有文件复制到了/opt/python2.7/lib/python2.7/site-packages/libsvm。

在Macintosh 10.6.6上做这个时,我需要做一些额外的步骤,这些步骤没有在说明书里提到。具体内容可以在我的博客这里找到。关键的一步是要在svm.py文件中添加以下内容:

 import os.path
_PATH = os.path.join( *os.path.split(__file__)[:-1] )

并且修改这个第一行代码:

if find_library('svm'):
   libsvm = CDLL(find_library('svm'))
elif find_library('libsvm'):
   libsvm = CDLL(find_library('libsvm'))
else:
   if sys.platform == 'win32':
      libsvm = CDLL('../windows/libsvm.dll')
   else:
      libsvm = CDLL('../libsvm.so.2')

让它看起来像这样:

if find_library('svm'):
  libsvm = CDLL(find_library('svm'))
elif find_library('libsvm'):
  libsvm = CDLL(find_library('libsvm'))
else:
  if sys.platform == 'win32':
    libsvm = CDLL(os.path.join(_PATH,'windows','libsvm.dll'))
  else:
    libsvm = CDLL(os.path.join(_PATH,'libsvm.so.2'))

但是,这些配置在这个Linux版本上都不管用。我对Linux不是很熟悉,所以我也不知道哪里出了问题。

在解释器中尝试解决这个问题时,我注意到ctypes.util.find_library('svm')或ctypes.util.find_library("libsvm.so.2")返回的是空值,这说明它根本不知道.so文件在哪里。

我能够通过在解释器中手动设置libsvm= CDLL(os.path.abspath("libsvm.so.2"))来强制指定位置。这样我只能在那个会话中导入svm。

任何帮助都非常感谢。

Mark

1 个回答

0

好了,问题解决了。真是我傻。原本应该在libsvm文件夹里添加__init__.py这个文件,但我却加了一个叫init.py的文件。等我把它改过来之后,就能正常工作了。不过,我觉得在libsvm-3.0的安装说明里应该提到要加__init__.py这个文件。

撰写回答