VS2015 C++调用Python3.5环境搭建

1. 安装Python环境

安装Anaconda (Python3.5)

2. 编写python脚本

新建python脚本文件pytest.py

# pytest.py
def add(a,b):
    print("in python function add")
    print("a = " + str(a))
    print("b = " + str(b))
    print("ret = " + str(a+b))

3. 编写用来调用Python脚本的C++程序

VS中新建一个C++项目,添加一个文件main.cpp

// main.cpp
#include <python.h>
#include <iostream>

int main(int argc, char* argv[])
{
    // init python
    Py_Initialize();
    if (!Py_IsInitialized())
        return -1;

    // load python script
    PyObject* pName = PyUnicode_FromString("pytest");
    PyObject* pModule = PyImport_Import(pName);
    if (!pModule) {
        std::cout << "can't find py_test.py" << std::endl;
        return -1;
    }

    // 
    PyObject* pDict = PyModule_GetDict(pModule);
    if (!pDict) {
        return -1;
    }

    // get "add" function
    PyObject* pFunc = PyDict_GetItemString(pDict, "add");
    if (!pFunc || !PyCallable_Check(pFunc)) {
        std::cout << "can't find function [add]" << std::endl;
        return -1;
    }

    // parameter
    PyObject *pArgs = PyTuple_New(2);
    PyTuple_SetItem(pArgs, 0, Py_BuildValue("l", 3));
    PyTuple_SetItem(pArgs, 1, Py_BuildValue("l", 4));

    // call python script
    PyObject_CallObject(pFunc, pArgs);

    //
    Py_DECREF(pName);
    Py_DECREF(pArgs);
    Py_DECREF(pModule);

    // close python
    Py_Finalize();

    return 0;
}

4. 配置项目属性

  • 将python的头文件(比如 C:\Users\Kyle\Anaconda3\include)添加到, 项目属性页->VC++目录-> 包含目录。
  • 将python.lib文件(比如 C:\Users\Kyle\Anaconda3\libs\python35.lib)添加到,配置->链接器->输入->附加依赖项。

5. 修改pyconfig.h文件

找到C:\Users\Kyle\Anaconda3\include\pyconfig.h文件,打开文件,搜索python35_d.lib,将

#           if defined(_DEBUG)
#               pragma comment(lib,"python35_d.lib")

修改为

#           if defined(_DEBUG)
#               pragma comment(lib,"python35.lib")

再搜索Py_DEBUG,将

#ifdef _DEBUG
#   define Py_DEBUG
#endif

修改为

#ifdef _DEBUG
//# define Py_DEBUG
#endif

6. 修改C++解决方案平台

如果python为64位。则需要将C++项目的解决方案平台修改为x64。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容