系统:windows
1.新建C++项目
2.打开cmd,使用py -0p命令获取python安装目录
3.把目录中的inlude文件夹和libs文件夹复制到项目目录下
4.把libs中的python312.lib复制一份并改名为python312_d.lib
5.在项目属性中分别将上面两个文件夹加入到包含目录和库目录中
注意因为一般安装的python都是release版,这里要修改的是release版的目录
6.在项目中加入#include <python.h>,把配置改为release,试一试能不能正常编译
7.打开cmd,使用 python -m venv + 路径 创建一个虚拟环境
8.在cmd中输入刚创建的虚拟环境中Scripts文件夹中activate.bat的路径,进入到虚拟环境中
按回车后,出现(venv)则代表进入了虚拟环境
9.使用pip install命令安装需要的库,比如numpy
10.在项目目录新建一个.py文件
11..py文件中要使用如下代码添加虚拟环境:
# 将虚拟环境目录添加到搜索目录
root_path = os.path.dirname(__file__)
sys.path.append(root_path+"\\venv\\Lib\\site-packages")
sys.path.append(root_path+"\\venv\\Scripts")
示例代码(以计算矩阵相乘为例) cpp代码使用的博客C/C++调用python(新手必看)-CSDN博客:
# testModule.py
import sys
import os
# 将虚拟环境目录添加到搜索目录
root_path = os.path.dirname(__file__)
sys.path.append(root_path+"\\venv\\Lib\\site-packages")
sys.path.append(root_path+"\\venv\\Scripts")
paths = sys.path
for p in paths:
print(p)
import numpy as np
def printmatrix(c, d):
a = np.arange(c, c+4)
b = np.arange(d, d+4)
print(a)
print(b)
print(a + b)
print(a * b)
//CallPython_2.cpp
#define PY_SSIZE_T_CLEAN
#include <Python.h>
int main()
{
//设定参数值
int c = 4;
int d = 6;
//第一步:初始化python环境
Py_Initialize();
//PyRun_SimpleString()执行命令语句
//测试python3的打印语句
PyRun_SimpleString("print('Hello Python!')\n");
PyRun_SimpleString("import os,sys");//执行import语句,把当前路径加入路径中,为了找到math_test.py
PyRun_SimpleString("sys.path.append('./')");
PyRun_SimpleString("print(os.getcwd())");//测试打印当前路径
PyObject* pModule;
PyObject* pFunction;
PyObject* pArgs;
PyObject* pRetValue;
//第二步:调用math_test脚本
pModule = PyImport_ImportModule("testModule");
if (!pModule) {
printf("import python failed1!!\n");
return -1;
}
//第三步:查找对应math_test.py中的def mainfunc(a,b)函数
pFunction = PyObject_GetAttrString(pModule, "printmatrix");
if (!pFunction) {
printf("get python function failed!!!\n");
return -1;
}
//第四步:新建python中的tuple对象(构建参数)
pArgs = PyTuple_New(2);
//PyTuple_SetItem(pArgs, 0, Py_BuildValue(""));
PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", c));
PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", d));
//第五步:调用函数
pRetValue = PyObject_CallObject(pFunction, pArgs);
//第六步:清空PyObject
Py_DECREF(pModule);
Py_DECREF(pFunction);
Py_DECREF(pArgs);
Py_DECREF(pRetValue);
if (!pModule) {
printf("2 import python failed!!\n");
return -1;
}
//第七步:很关键的一步,如果是多次导入PyImport_ImportModule模块
//只有最后一步才调用Py_Finalize(),此时python全局变量一直保存着
Py_Finalize();
//方便查看
while (1);
return 0;
}
运行结果: