C++调用python 之 环境配置(VS2015 + anaconda)

目录

    • 已有环境:
    • VS配置python(Anaconda中的python)
    • VS配置额外包(以numpy为例)

项目中需要用到深度学习模型进行检测,但是项目是C++的,又不太可能用C++去实现深度学习模块,所以只能用C++去调用python了。

C++与python的交互有很多种方式和工具,例如:直接调用python解释器,boost,pybind11等等。如果交互不是非常多的情况下直接调用python能够方便一点,其它两个我目前还不是很了解。所以本文的方法就是直接调用python解释器

已有环境:

  • Windows10
  • VS2015
  • Anaconda,并已经安装numpy,opencv-python(这都算是额外包,没装的后面再装也可)
  • python3.7,同样也是在Anaconda里的,并不是单独装的
  • opencv3.4.1 这是项目中使用的C++版,并不是python环境中的opencv-python

以上的安装以及配置在本文不做介绍,读者可自行查阅其它博文安装,本文主要介绍在VS中对python等进行配置
我的Anaconda安装目录是D:\Anacoda\Anaconda3_setup

VS配置python(Anaconda中的python)

Visual Studio配置包含目录:D:\Anacoda\Anaconda3_setup\include
Visual Studio配置库目录:D:\Anacoda\Anaconda3_setup\libs
Visual Studio配置链接器-输入-附加依赖项:增加python37.lib(release模式)/python37_d.lib(debug模式)
新增环境变量:PYTHONHOME=D:\Anacoda\Anaconda3_setup,改完环境变量一定要重启才能生效。

如果报错: debug配置的时候可能没有python37_d.lib
解决:那就把python37.lib复制一个,然后重命名为python37_d.lib即可,就和python37_d.lib放在一起就行(都是在libs文件夹下)

测试的时候报错: 由于找不到python37.dll,无法继续执行代码
解决: 复制一份 python37.dll文件,放到C:\Windows\System32 这个路径就行了

测试时报错: Fatal Python error: Py_Initialize: unable to load the file
system codec ModuleNotFoundError: No module named ‘encodings’
解决:参考https://blog.csdn.net/truffle528/article/details/83040771
1、在系统变量的path中增加该虚拟环境的文件夹路径,例如D:\Anacoda\Anaconda3_setup(可以的话把它上移到最上面)
2、在系统变量中添加PYTHONHOME变量,值设为该虚拟环境的文件夹路径,和上面一样
我在解决报错的时候这两条都做了,由于时间关系没有去测试到底是哪个起的作用

VS配置额外包(以numpy为例)

首先说明,这里需要配置的额外包是在C++中需要用到的相关包,比如我需要把图片传到python模块中,因此需要把Mat转为numpy.array的格式,就需要用到npy_intp等等,就得在VS中配置numpy。而像opencv-python,torch这种只在python模块中使用的包就不用在VS中配置了,在Anaconda中安装好就行了。

Visual Studio头文件目录:D:\Anacoda\Anaconda3_setup\Lib\sitepackages\numpy\core\include

如果报错:无法解析的外部符号 __imp__Py_NegativeRefcount,该符号在函数 _import_array 中被引用
解决:https://blog.csdn.net/ganwenbo2011/article/details/89790686,大概率是因为numpy是release版本的,所以把项目改成release模式,并添加对应的配置

主要参考:https://blog.csdn.net/ziweipolaris/article/details/83689597

你可能感兴趣的:(小技巧,c++,python,visual,studio,window,windows,10)