在CentOs 5.5上为Python-2.7.1构建libsvm-3.0的问题
我在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
这个文件。