Ubuntu18.04系统中python3.7安装MultiNEAT库

前言

MultiNEAT介绍

MultiNEAT支持标准的NEAT算法和两个关键的扩展:HyperNEAT和ES-HyperNEAT。另外,MultiNEAT库提供新奇搜索方法的实现。该库使用C ++编程语言编写,但提供了全面的Python接口。

安装问题

学习新奇搜索等进化神经算法时,需要用到MultiNEAT库,在安装时遇到了如下问题:

  1. 不能使用pip进行安装,在windows中可以利用.whl文件进行安装,而在ubuntu环境中,只能利用源码编译安装。
  2. 在安装MultiNEAT之前,首先需要安装boost,否则会报类似如下错误:
    ...
    ...
    src/PythonBindings.cpp:34:10: fatal error: boost/python.hpp: No such file or directory
     #include <boost/python.hpp>
              ^~~~~~~~~~~~~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    

boost安装

使用apt命令安装boost库

$ sudo apt-get install libboost-all-dev

MultiNEAT安装

  1. 首先,下载MultiNEAT.
    下载完成后得到peter-ch-MultiNEAT-0dc93aa.tar.gz文件
  2. 然后,安装依赖库.
    由于编译过程中会使用psutil库,因此首先安装psutil库。
    $ pip3 install psutil
    
  3. 解压.
    $ tar -zxvf peter-ch-MultiNEAT-0dc93aa.tar.gz
    
  4. 编译MultiNEAT
    $ cd peter-ch-MultiNEAT-0dc93aa
    # 通过MN_BUILD环境变量来设置所需的系统(boost或cython)。
    $ export MN_BUILD=boost
    # 编译
    $ python3.7 setup.py build_ext
    
  5. 安装
    $ python3.7 setup.py install
    
  6. 测试
    $ python3.7
    Python 3.7.7 (default, Oct  3 2020, 12:01:51) 
    [GCC 7.5.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import MultiNEAT
    >>> MultiNEAT.__str__()
    "<module 'MultiNEAT' from '/home/brainiac/Program/python3.7/lib/python3.7/site-packages/multineat-0.5-py3.7-linux-x86_64.egg/MultiNEAT/__init__.py'>"
    

安装过程遇到问题及解决方法

Note 如在编译时遇到如下问题:

$ python3.7 setup.py build_ext
...
...
/usr/bin/ld: cannot find -lboost_python36
/usr/bin/ld: cannot find -lboost_numpy36
collect2: error: ld returned 1 exit status
error: command 'g++' failed with exit status 1

由于已经安装了boost库,通过搜索boost_pythonboost_numpy可以发现,在/usr/lib/x86_64-linux-gnu目录中包含以下文件

...
libboost_numpy3.a
libboost_numpy3-py36.a
libboost_numpy3-py36.so
libboost_numpy3-py36.so.1.65.1
libboost_numpy3.so
libboost_numpy.a
libboost_numpy-py27.a
libboost_numpy-py27.so
libboost_numpy-py27.so.1.65.1
libboost_numpy.so
...
libboost_python3.a
libboost_python3-py36.a
libboost_python3-py36.so
libboost_python3-py36.so.1.65.1
libboost_python3.so
libboost_python.a
libboost_python-py27.a
libboost_python-py27.so
libboost_python-py27.so.1.65.1
libboost_python-py36.a
libboost_python-py36.so
libboost_python.so
...

可以看到虽然不存在libboost_python36.solibboost_numpy36.so,但是存在libboost_python3-py36.solibboost_python3.solibboost_python.solibboost_numpy3-py36.solibboost_numpy-py27.solibboost_numpy.so,因此根据python版本可以选择使用对应的动态链接库,由于以python3.7为例,需要对文件进行修改。
使用以下方法:
在进行编译之前,首先需要修改目录下的以下两个文件.

  • CMakeLists.txt
    $ vim CMakeLists.txt
    

修改line 15 & 16,将python36修改为python37numpy36修改为numpy3737即需要安装MultiNEAT的python版本号,可以根据需要进行修改,修改后如下:

	...
	...
	find_package(Boost COMPONENTS
	    date_time
	    system
	    filesystem
	    python37
	    numpy37
	    serialization)
	...
	...
  • setup.py
    $ vim setup.py
    

修改line 114,将libs += ['boost_python36', "boost_numpy3"]修改为libs += ['boost_python3', "boost_numpy3"]
修改后,相应部分如下

...
        libs = ['boost_system', 'boost_serialization']
        if is_python_2:
            libs += ['boost_python', "boost_numpy"]
        else:
            # with boost 1.67 you need boost_python3x and boost_numpy3x where x is python version 3.x 
            libs += ['boost_python3', "boost_numpy3"]  # in Ubuntu 14 there is only 'boost_python-py34'
...

然后重新编译安装、测试:

$ python3.7 setup.py clean
$ python3.7 setup.py build_ext
$ python3.7 setup.py install
$ python3.7
Python 3.7.7 (default, Oct  3 2020, 12:01:51) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MultiNEAT
>>> MultiNEAT.__str__()
"<module 'MultiNEAT' from '/home/brainiac/Program/python3.7/lib/python3.7/site-packages/multineat-0.5-py3.7-linux-x86_64.egg/MultiNEAT/__init__.py'>"

完成后,进行测试,可以发现已正确安装。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼小辉丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值