VS 中 C++ 和 Python 联合开发 使用第三方库 虚拟环境配置

系统: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;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值