linux下安装boost python详解

boost.python 介绍

boost.python 是boost库的一个子功能,可以实现python和C/C++的无缝衔接。相比于cpython和cython来说boost.python在使用上会更加方便。关于boost.python的详细内容可参见 boost.python官网

boost.python的检查与卸载

如果系统已经安装了boost要先检查是否已经有了此功能,如果之前boost是编译安装并且是完全安装的,应该已经安装了boost.python子功能,如果没有安装或者boost.python绑定了你不需要的python版本,则需要重新安装。

检查boost.python

我们直接去编译一段代码,如果可以通过,则说明已经安装。示例代码 test.cpp

#include <boost/python.hpp>
char const* greet()
{
   return "hello, world";
}
BOOST_PYTHON_MODULE(test)
{
    using namespace boost::python;
    def("greet", greet);
}

编译命令

g++ -I/usr/include/python2.7  -fPIC test.cpp -lboost_python -shared -o test.so

如果程序可以正常通过编译,一般能说明系统已经安装了python.boost 并且绑定了python2。
如果boost的版本和python的版本都符合你的要求,则皆大欢喜,如果没有得到预期结果,则继续往下读。

检查boost

如果你的系统没有安装boost.python,但有可能已经安装了boost(boost的非完全安装)这种情况下则需要卸载重新安装,所以我们需要检查系统是否安装了boost。boost一般会通过两种方式安装:1.包管理器安装 2.编译安装。针对这两种方式,以下提供了对应的检查和卸载方式:
1.包管理器安装方式的检查、卸载

如果你的boost是通过yum(redhat阵营的linux,如redhat/centos)或者apt-get(debian阵营的linux,如ubuntu/deepin)安装的,则可以使用这两个工具检查,如果已经安装,则会显示boost的版本,如果没有安装则显示找不到相关文件:

系统类别检查命令
redhatrpm -qf /usr/include/boost/version.hpp
debiandpkg -S /usr/include/boost/version.hpp

如果检查到了则需要卸载
以boost1.58版本为例

系统类别卸载命令
redhatsudo yum remove libboost1.58-dev
debiansudo apt-get autoremove libboost1.58-dev

2.编译方式安装的检查、卸载
通过find 命令查找 boost/version.hpp

sudo find / -iname version.hpp

查看boost的版本

cat version.hpp| grep “BOOST_LIB_VERSION” 

如果查到了,则说明已经安装了boost,需要卸载。此处卸载比较检查,直接删除相关库文件和头文件即可:

sudo rm -r -f /usr/local/include/boost*
sudo rm -f /usr/local/lib/libboost*

boost.python的安装

安装boost.python其实就是安装boost,只不过我们安装的时候选择完全安装即可。读到此处的朋友基本上都是需要重装boost或者需要boost.python子功能的,所以此处不建议使用包管理器安装,它会带来一些问题,我们直接选择编译安装。

下载boost安装包

下载boost安装包可以直接到 boost官网。可以根据自己的需求选择相应的版本。如有不解,也可搜索相应的文章,此处不做赘述。

安装boost

因为我们要使用boost.python,所以我们需要先检查自己的python安装位置及其版本,一般linux系统都会自带python2和python3,默认为python2,此处分两部分讲解。

python2版本的boost.python安装

因为python2一般是linux默认的python版本,所以这里的安装不需要我们做过多的设置

  1. 解压boost安装包,并进入到首层目录。
  2. 执行配置,选择完全安装
./bootstrap.sh --with-libraries=all 
  1. 也可以通过 --prefix 指定安装目录,但一般不建议,除非自己有特殊安排。默认目录为 /usr/local/lib/usr/local/include/boost
./bootstrap.sh --with-libraries=all  --prefix=/usr/local/boost 
  1. 编译安装
    编译之后会有成功提示,如果没有成功不要执行安装。关于安装失败的解决,此处不做赘述,大家可以查看其它相关文章。
sudo ./b2
sudo ./b2 install 

安装成功好会在 /usr/local/include/boost 和 /usr/local/lib 下看到boost的头文件和库文件

python3版本的boost.python安装

如果想使用python3和boost.python一起使用,则需要在上面基础上做一些调整,其实就是制定python的相关信息,让boost安装器不使用默认的python2。此处以python3.6m为例。

  1. 解压boost安装包,并进入到首层目录。
  2. 执行配置,选择完全安装。此处要指定python3.6的位置,不同的linux系统有所不同,可以通过命令: which python3来查找路径。
 ./bootstrap.sh  --with-libraries=all --with-python=/usr/bin/python3.6m
  1. 配置project-config.jam,编辑python相关目录,执行:
vim project-config.jam

打开文件后编辑 using python 字段,如下:

using python : 3.6 : /usr/bin/python3.6m : /usr/include/python3.6m : /usr/lib/python3.6 ;

表示的意义为:
版本号 : 可执行文件位置:头文件目录:库文件目录

  1. 编译安装
sudo ./b2
sudo ./b2 install --with-python include="/usr/include/python3.6m" 

到此处,boost.python安装完成。

boost.python的测试

#include <boost/python.hpp>
char const* greet()
{
   return "hello, world";
}
BOOST_PYTHON_MODULE(test)
{
    using namespace boost::python;
    def("greet", greet);
}

编译命令

g++ -I/usr/include/python2.7  -fPIC test.cpp -lboost_python -shared -o test.so

编写python脚本,test.py

import test
print(test.greet())

执行

python test.py

应该会输出:
hello, world

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值