文章目录

  • 前言
  • 一、前期准备
  • 二、大致步骤
  • 坑一:关于解释器的问题
  • 坑二:关于pybind11
  • 写在后面



前言

最近需要使用NGT包,链接: 参考博客,这篇博客对NGT包做了简介,其主要内容翻译自源码的自述文件。其中也附带了下载地址,此处不多赘述了。
NGT是使用C++编写的,如果要用Python调用有些麻烦。
主要是以下几步:
1.CMake生成(需要CMake,gcc)
2.生成Python可执行的文件(需要pybind11)

一、前期准备

我的系统:Ubuntu
我的环境:python 3.6.2
特别注意:需要提前安装好
1.CMake(链接: 安装CMake);
2.gcc(链接: 安装gcc)
3.pybind11(仅用pip安装是不够的,因为从C++程序包含了他的头文件,所以需要C++的pybind11,链接: 安装pybind11)

二、大致步骤

详细在附带链接中已经有介绍,博主再多说几句:

第一步,CMake,下面语句执行后,会在新建的build文件夹中生成一堆东西,下面是自述文件中的语句。

cmake 如何指定python版本 cmake编译python_cmake 如何指定python版本

第二步,如果需要Python调用,进入python文件夹,看到自述文件如下图:
首先,亲测pip3 install ngt无效,找不到
然后,采用下面的方案,即从C++生成python可执行文件,详见下文

cmake 如何指定python版本 cmake编译python_python_02

坑一:关于解释器的问题

python文件夹下的setup.py,自述文件中告诉我们直接使用python3 setup.py sdist,这句话是将C++打包成一个ngt-x.x.x.tar.gz文件,便于以后安装。
那么坑在哪里呢?博主想把这个包安装在自己的环境里,所以一直在想要安装的环境中操作,总是失败,点开后发现,有这一句

#!/usr/bin/env python

这一句是要在默认目录下寻找解释器,然而我的环境并不在这目录下,所以以上操作均需要在base环境运行,不过没关系,只要生成了可执行文件,后面就好办。

坑二:关于pybind11

准备好了CMake,gcc,在base环境下运行总行了吧,还不够!!!

自述文件说直接用pip3 install pybind11,这个很快成功,

一直到 pip3 install dist/ngt-1.12.2.tar.gz,(图中红色画笔部分)

出现了两个错误(图中蓝色画笔(这个问题重装了一下gcc得到解决,详见本文前面链接),以及绿色画笔)

绿色画笔部分的错误就是因为C++在打包时缺了pybind11头文件,所以无法打包,需要安装,这里再放一次安装教程链接: 安装pybind11

cmake 如何指定python版本 cmake编译python_CMake_03


安装pybind11完成如下:

cmake 如何指定python版本 cmake编译python_CMake_04


这时候再 pip3 install dist/ngt-1.12.2.tar.gz,就可以成功了

cmake 如何指定python版本 cmake编译python_python_05


当然,这是安装在base下,我还是想安装在自己的环境,直接执行就可以了

cmake 如何指定python版本 cmake编译python_linux_06

写在后面

NGT包本身并不复杂,只是这个包比较小众,相关博客不多且语焉不详。
源码作者的自述文件是没问题的,只是对小白不太友好。
博主缺乏经验,这次也是了解了一个完整的打包安装过程,所以做一下笔记,以后在遇到类似的问题可以参照解决,本文若有不足之处还请见谅。