在OS X 中安装boost.python, 使用homebrew[译]

<embed src="//music.163.com/style/swf/widget.swf?sid=466844094&type=2&auto=1&width=320&height=66" width="340" height="86"  allowNetworking="all"></embed>

使用Homebrew在OSX上安装boost和boost-python


作者:Adrian Rosebrock于2015年4月27日在图书馆,资源
logos_header

我真的,真的希望有人发现这个资源很有用。我过去几个月浪费的时间(被动)试图通过Homebrew在我的OSX机器上安装和升级python,这简直令人难以忍受。

别误会我的意思,我喜欢自制软件。如果你在OSX机器上并且没有使用Homebrew,那么我建议你不要再阅读这篇文章并立即安装它。

无论如何,就像我说的那样,我希望这篇文章可以节省其他人一些时间和麻烦。虽然这篇文章并不完全致力于计算机视觉,但如果您使用Python和OpenCV开发基于计算机视觉的应用程序,它仍然非常重要。

诸如Spotify的用于近似最近邻搜索的Annoy之类的包在基于内容的图像检索(CBIR)/图像搜索引擎空间中具有直接应用。

2015年5月4日更新:Erik Bernhardsson发布了对Annoy的更新,消除了来自Annoy的Boost和Boost.Python的依赖性。你现在可以使用pip:pip install annoy简单地安装Annoy而不需要任何额外的依赖。

dlib等库提供了Python绑定,因此您可以利用Python shell中dlib的强大功能。

Annoy和dlib只是需要使用boost的两个包的例子(如果你想要Python绑定,还有boost-python)。

无论如何,让我们继续开始这个教程 - 我绝对浪费了我的时间来处理这个问题,我也不想浪费你的任何一个!

什么是Homebrew?

Homebrew是“缺少OSX的软件包管理器”。它使得安装和管理默认Apple安装未安装的软件包变得轻而易举,就像Debian apt-get一样。

注意:将Homebrew与apt-get进行比较并不完全公平,但如果这是您第一次听到Homebrew,那么这种比较就足够了。

什么是boost和boost-python?


Boost是经过同行评审(即非常高质量)的C ++库的集合,可帮助程序员和开发人员不再陷入重新发明轮子的境地。 Boost提供了线性代数,多线程,基本图像处理和单元测试的实现,仅举几例。

同样,这些库经过同行评审,质量非常高。大量的C ++应用程序,特别是在科学领域,以某种方式依赖于Boost库。

我们还有boost-python,它提供了C ++和Python编程语言之间的互操作性。

为什么这有用?

好吧,假设您正在实现近似最近邻算法(如Spotify's Annoy),并且您希望提供纯粹的,普通的Python支持。

但是,您希望将最后一点内存和CPU性能从库中提取出来,因此您决定在C ++中实现性能关键部分。

为此,您将使用boost在C ++中编写这些关键任务 - 然后使用boost-python与Python编程语言进行交互。

事实上,这正是Annoy包的功能。虽然软件包是可以安装pip的,但软件包需要boost和boost-python才能编译和安装。

 

使用Homebrew在OSX上安装boost和boost-python


现在我们已经有了一些基本的术语,让我们继续安装我们的软件包。

 

第1步:安装Homebrew

安装Homebrew并不容易。

只需前往Homebrew主页,将以下代码复制并粘贴到您的终端中:

1
$ ruby​​ -e“$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”


注意:此博客文章是在2015年1月撰写的。绝对可以访问Homebrew主页并使用Homebrew社区提供的最新安装脚本。

第2步:更新Homebrew

现在您已经安装了Homebrew,您需要更新它并获取最新的包(即“公式”)定义。这些公式只是有关如何安装给定库或包的说明。

要更新Homebrew,只需执行以下操作:

1

$brew update

第3步:安装Python

使用系统Python作为主要解释器是不好的形式。如果您打算使用virtualenv,尤其如此。

在我们继续之前,让我们通过brew安装Python:

使用HomebrewShell在OSX上安装boost和boost-python

1
$ brew install python

第4步:安装boost

到现在为止还挺好。但是现在是时候安装boost了。

这是你真正需要开始关注的地方。

要安装boost,请执行以下命令:

使用HomebrewShell在OSX上安装boost和boost-python

1
$brew install boost --with-python

你看到--with-python旗帜?

是的,不要忘记 - 这很重要。

在我的例子中,我认为在给定--with-python的情况下已经安装了boost-python

显然情况并非如此。 您还需要显式安装boost-python。 否则,当您尝试从Python中调用期望查找boost绑定的包时,您将会遇到可怕的段错误。

此外,您可能希望在增强下载,编译和安装的同时进行一些不错的步行。这是一个大型图书馆,如果你热衷于在整个工作日期间优化你的时间(就像我一样),那么我强烈建议你上下文切换并完成其他工作。

Step 5: Installing boost-python

boost安装完毕,类似的,我们可以安装boost-python:

1	$ brew install boost-python

 

boost-python软件包的安装速度应该比boost更快,但是你仍然可能想要自己做一杯咖啡,特别是如果你的系统很慢。

Step 6: 确认boost和boost-python已安装

确保安装了boost和boost-python:

1     $ brew list | grep 'boost'
2     boost
3     boost-python 

正如您从终端输出中看到的那样,boost和boost-python都已成功安装(前提是您没有从上述步骤中获得任何错误)。

已经在使用Python + virtualenv了吗?继续阅读。


哦,你以为我们完成了?

我也是。孩子,这是一个错误。

因为猜什么?如果你已经安装了Python并且正在使用virtualenv(在我的情况下,还有virtualenvwrapper),你还有一些工作要做。

注意:如果您尚未使用virtualenv和virtualenvwrapper来管理Python包,那么您应该仔细研究这个问题。它让你的生活变得更加轻松 - 相信我。

新的virtualenvs:

如果你正在创造一个新的virtualenv,你会很高兴。无需额外的工作,一切都将顺利开箱即用。

现有的virtualenvs:

所以,让我告诉你一些你已经知道的事情:当我们构建一个虚拟环境时,我们的Python可执行文件以及相关的库包括,并且站点包被克隆并隔离到它们自己的独立环境中。

让我告诉你一些你可能不知道的事情:如果你在编译和安装boost和boost-python之前已经有了virtualenv设置(就像我一样),那么你将无法访问你的boost绑定。

那么解决这个问题的最佳方法是什么?

老实说,我不确定“最好”的方式是什么。必须有比我提议的更优雅的方法。但以下是我解决的解决办法:

  1. 为virtualenv生成了requirements.txt
  2. 停用并删除了我的virtualenv
  3. 重新创造了我的virtualenv
  4. pip install -r requirements.txt 完成这个步骤

(在此团子酱查阅了anaconda下安装虚拟环境的步骤https://blog.csdn.net/suelai/article/details/80538599,以及anaconda安装好后需要进行的环境配置https://blog.csdn.net/lq_547762983/article/details/81003528

在您执行这些步骤之后,您的新virtualenv将具有boost-python绑定。希望你不会浪费尽可能多的时间。

一个annoy的例子


现在我们已经安装了boost和boost-python,让我们使用Annoy包将它们用于测试驱动器。

2015年5月4日更新:正如我在本文顶部提到的,Erik Bernhardsson已经发布了对Annoy的更新,它消除了来自Annoy的Boost和Boost.Python的依赖性。您现在可以使用pip简单地安装Annoy,而无需安装Boost或Boost.Python。

让我们首先使用virtualenvwrapper创建virtualenv:

1

2

3

4

$ mkvirtualenv annoy

...

$ pip install numpy annoy

...

 

现在我们已经安装了包,让我们用128-D创建1000个随机向量。 我们将这些向量传递给Annoy并使用10棵树构建嵌入:

>>> 
import numpy as np

>>> 
M = np.random.normal(size=(1000, 128))

>>> 
from annoy import AnnoyIndex

>>> 
ann = AnnoyIndex(128)

>>>

for (i, row) in enumerate(M):

    ...

    ann.add_item(i, row.tolist())

    ...

>>> ann.build(10)
现在我们创建了嵌入,让我们找到列表中第一个向量的10个(近似)最近邻居:
1 >>> ann.get_nns_by_item(0, 10)
2 [0, 75, 934, 148, 506, 915, 392, 849, 602, 95]
我们还可以找到尚未成为索引的一部分的最近邻居:
1 >>> ann.get_nns_by_vector(np.random.normal(size=(128,)).tolist(), 10)
2 [176, 594, 742, 215, 478, 903, 516, 413, 484, 480]

那么如果你试图在没有安装boost和boost-python的情况下执行这段代码会怎么样?

在get_nns_by_item和get_nns_by_vector函数期间,您的代码会出现段错误。如果您使用的是dlib,那么在导入过程中会出现段错误(segfault)。绝对要记住一些事情。如果你在这些函数中是段错误的,那么你的boost和boost-python安装就会变得很糟糕。

摘要

在这篇博文中,我回顾了如何使用Homebrew在OSX上安装boost和boost-python。就个人而言,我在几个月的时间内被动地处理这个问题浪费了大量的时间 - 本文的目标是(希望)帮助您节省时间并避免任何心痛和挫折。

如果你知道一个更优雅的方法来解决这个问题,请在评论中告诉我或给我发电子邮件!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值