Blog

Blog

PHODAL

Mac OS CentOS 安装flann pyflann

原本安装pyflann应该是很简单的一件事,但是似乎作者没有考虑到这些,他用的应该是Ubuntu吧,即不兼容CentOS,也无法在Mac OS上面用。

FLANN

目前最完整的(近似)最近邻开源库。不但实现了一系列查找算法,还包含了一种自动选取最快算法的机制。

FLANN is a library for performing fast approximate nearest neighbor searches in high dimensional spaces.

Mac OS安装flann

方法比较简单。。

brew install flann

或者

sudo port install flann

CentOS安装flann

CentOS安装flann 以及pyflann

yum install flann
yum insall flann-python

但是都存在问题

CentOS pyflann报错

raise ImportError('Cannot load dynamic library. Did you compile FLANN?')
 ImportError: Cannot load dynamic library. Did you compile FLANN?

这个总是好解决,查看一下site-packages下面的flann_ctypes.py就会发现

libnames = ['libflann.so']
libdir = 'lib'
if sys.platform == 'win32':
    libnames = ['flann.dll', 'libflann.dll']
elif sys.platform == 'darwin':
    libnames = ['libflann.dylib']

while root_dir!=None:
    for libname in libnames:
        try:
            #print "Trying ",os.path.join(root_dir,'lib',libname)
            flannlib = cdll[os.path.join(root_dir,libdir,libname)]
            return flannlib
        except Exception:
            pass
        try:
            flannlib = cdll[os.path.join(root_dir,"build",libdir,libname)]
            return flannlib
        except Exception:
            pass
    tmp = os.path.dirname(root_dir)
    if tmp == root_dir:
        root_dir = None
    else:
        root_dir = tmp

库的名字是libflann.so,从/usr/lib下面复制过来

 cp /usr/lib/libflann.so.1.7 /usr/lib/python2.6/site-packages/pyflann/lib

Mac OS pyflann报错

这个问题真心比较坑爹

Mac OS site-packages

查看site-packages路径的方法

Python 2.7.5 (default, Sep 12 2013, 21:33:34)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import site;
>>> site.getsitepackages();
['/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/Library/Python/2.7/site-packages']
>>> exit;

所以我们需要cd到这个目录

  cd /Library/Python/2.7/site-packages/pyflann-1.6.11-py2.7.egg/pyflann

遇到这个错误时

  ImportError: No module named bindings.flann_ctypes

需要建个bindings再将flann_ctypes等文件拷贝过去

接着再需要从某个linux机器上,或者从代码中拷贝出io


或许您还需要下面的文章:

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Developer, Consultant, Writer, Designer

ThoughtWorks 高级咨询师

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 与我沟通

标签

最近的一些事

  • 最近我和我的同事们,一起在创建一个新的编程语言:Charj 。它是一个使用 Rust 编写的描述式、中间编程语言。GitHub: https://github.com/charj-lang/charj

    Nov. 14, 2020, 9:27 p.m. | China