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的版本,如果没有安装则显示找不到相关文件:
系统类别 | 检查命令 |
---|---|
redhat | rpm -qf /usr/include/boost/version.hpp |
debian | dpkg -S /usr/include/boost/version.hpp |
如果检查到了则需要卸载
以boost1.58版本为例
系统类别 | 卸载命令 |
---|---|
redhat | sudo yum remove libboost1.58-dev |
debian | sudo 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版本,所以这里的安装不需要我们做过多的设置
- 解压boost安装包,并进入到首层目录。
- 执行配置,选择完全安装
./bootstrap.sh --with-libraries=all
- 也可以通过 --prefix 指定安装目录,
但一般不建议
,除非自己有特殊安排。默认目录为/usr/local/lib
和/usr/local/include/boost
./bootstrap.sh --with-libraries=all --prefix=/usr/local/boost
- 编译安装
编译之后会有成功提示,如果没有成功不要执行安装。关于安装失败的解决,此处不做赘述,大家可以查看其它相关文章。
sudo ./b2
sudo ./b2 install
安装成功好会在 /usr/local/include/boost 和 /usr/local/lib 下看到boost的头文件和库文件
python3版本的boost.python安装
如果想使用python3和boost.python一起使用,则需要在上面基础上做一些调整,其实就是制定python的相关信息,让boost安装器不使用默认的python2。此处以python3.6m为例。
- 解压boost安装包,并进入到首层目录。
- 执行配置,选择完全安装。此处要指定python3.6的位置,不同的linux系统有所不同,可以通过命令:
which python3
来查找路径。
./bootstrap.sh --with-libraries=all --with-python=/usr/bin/python3.6m
- 配置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 ;
表示的意义为:
版本号 : 可执行文件位置:头文件目录:库文件目录
- 编译安装
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