C++调用或者运行python文件,包含第三方库

有时候我们已有的代码库是c++的,但是我们要调用比如pytorch写的python文件,这时候就需要这样混合调用。有些文章写调用第三方库需要把python下面的Lib和DLL文件夹拷贝到release后的.exe在的文件夹下,事实上不需要这么做。按照我的步骤一步步做即可一般在Windows上写c++我们是用vs,这里以vs为例讲一讲这里面的坑。

如何利用visual studio调用以及调用的详细步骤

1.配置环境

要在 Visual Studio 中创建新c++ 项目,请选择“文件”>“新建”>“项目”。建好的解决方案如下
在这里插入图片描述
解决方案可以包括多个项目,为了编程方便,这边需要建立两个项目在同一个解决方案下面
在这里插入图片描述
如图所示,我这里建造了一个cpp项目和一个python项目,接下来右键点击TestPyCpp,选择属性选项。

在这里插入图片描述
这里要特别注意!!!,我安装的python是release版本,所以,解决方案配置为Release的x64
在这里插入图片描述

2.编写代码

新建一个cpp文件,代码如下:这里是用的<Python.h>而不是pybind11对python进行调用,编辑系统变量,设置python home很重要不然会报错。
exec(open(,那段话是python3直接启动.py文件的语句,这里我这么用是意图直接调用py文件。
cpp:

#include <Python.h>
#include <iostream>
#include <pybind11/pybind11.h>


void main() {
	//需要进行强制类型转换
	//否则报错“void Py_SetPythonHome(wchar_t *)”: 无法将参数 1 从“const wchar_t [44]”转换为“wchar_t *”
	Py_SetPythonHome((wchar_t*)L"C:\\ProgramData\\Anaconda3"); // 编辑系统变量,设置python home
	Py_Initialize();
	
	PyRun_SimpleString("print('Hello Python!')\n");
	PyRun_SimpleString("import os,sys");//执行import语句,把当前路径加入路径中,为了找到math_test.py
	//PyRun_SimpleString("sys.path.append('./')"); //这句不用也可以,只是确保能找到py文件
	PyRun_SimpleString("print(os.getcwd())");//测试打印当前路径
	PyRun_SimpleString("exec(open('../Pythontest/read_table.py', encoding = 'utf-8').read())");//python3的exec方法

	Py_Finalize();
}

新建一个python文件,注意import os下面的3句话,这三句话可以将以下几个路径添加到 system path variable(系统变量中).如果没有这句话,则会出现类似于以下报错

>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Anaconda3\envs\test\lib\site-packages\numpy\__init__.py", line 180, in <module>
    from . import add_newdocs
  File "C:\Anaconda3\envs\test\lib\site-packages\numpy\add_newdocs.py", line 13, in <module>
    from numpy.lib import add_newdoc
  File "C:\Anaconda3\envs\test\lib\site-packages\numpy\lib\__init__.py", line 8,
 in <module>
    from .type_check import *
  File "C:\Anaconda3\envs\test\lib\site-packages\numpy\lib\type_check.py", line 11, in <module>
    import numpy.core.numeric as _nx
  File "C:\Anaconda3\envs\test\lib\site-packages\numpy\core\__init__.py", line 14, in <module>
    from . import multiarray
ImportError: DLL load failed: The specified module could not be found.

路径

C:\ProgramData\Anaconda3\
C:\ProgramData\Anaconda3\bin
C:\ProgramData\Anaconda3\Scripts
C:\ProgramData\Anaconda3\Library\mingw-w64\bin (not strictly necessary)
C:\ProgramData\Anaconda3\Library\bin

py代码:

import os
base_path = r"C:\ProgramData\Anaconda3"
path = os.pathsep.join([os.path.join(base_path, i) for i in [r"", r"bin", r"Scripts", r"Library\mingw-w64\bin", r"Library\bin"]])
os.environ["PATH"]+=os.pathsep+path
import pandas as pd


if __name__ == "__main__":
	print("PYTHONPATH:", os.environ.get('PYTHONPATH'))
	print("PATH:", os.environ.get('PATH'))
	a=pd.read_csv("../TestPyCpp/samples/Gd.s.csv")
	print(a.x)
	print("hahah")

接着调试即可出现以下内容
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值