Windows10 C++(VS2017)调用python(python3.8)-1.VS配置 tcy

1.VS配置方法:

1.1.方法1:
    1)将include和libs,lib文件夹复制到vs项目路径下面
    2)将你需要调用的python脚本也存放在该目录下面 xxx.sln目录第一级目录

1.2.方法2:vs属性设置

    1)文件--新建项目--Visual C++---其他--空项目:输入新建项目名

    2)项目--属性:
        a)配置:Release 平台:x64
        b)打开属性配置对话框--新建属性表python_swig.props
        
        说明:
            将来程序调试运行在Relase;
            若一定要在Debug下运行拷贝python.lib并更名python_d.lib
        
    3)属性配置表python_swig.props配置如下:
        python_swig属性页--通用属性:
        a) 配置Python.h路径:
            VC++目录---常规:包含目录:C:\ProgramData\Anaconda3\include
            或:
            C/C++--常规--附加包含目录: C:\ProgramData\Anaconda3\include
            
        b) 配置python3.lib路径:
            (a).连接器--常规--附加库目录:C:\ProgramData\Anaconda3\libs
            (b).链接器--输入--附加依赖项:python3.lib(Relase);python37_d.lib(Debug)
    
    说明:
        1)包含目录和库目录也可在VC++目录下添加
               VC++目录--常规:包含目录:C:\ProgramData\Anaconda3\include
                                               库目录:   C:\ProgramData\Anaconda3\libs
        
        2)此配置可在C++调用python,也可用SWIG 包装C++在python中调用。

2.添加环境变量

检查Windows10系统环境变量:添加
    C:\ProgramData\Anaconda3(PYTHONHOME)# 缺失导致在C程序中调用Py_Initialize()时遇到Python初始化错误
    C:\ProgramData\Anaconda3\include
    C:\ProgramData\Anaconda3\libs

    C:\ProgramData\Anaconda3\Scripts;
    C:\ProgramData\Anaconda3\Library\bin;
    C:\ProgramData\Anaconda3\Library\mingw-w64\bin;
    C:\ProgramData\Anaconda3\Lib\site-packages\Cython\Build;
    C:\ProgramData\Anaconda3\Library\usr\bin;

    C:\MinGW64\bin;
    C:\swigwin;

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\;
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\;

    C:\Program Files\Point Grey Research\Spinnaker\bin\vs2015;
    ;C:\Program Files\Point Grey Research\Spinnaker\bin64\vs2015;

    C:\opencv\build\bin;
    C:\opencv\build\include;
    C:\opencv\build\x64\vc14\bin;
    C:\opencv\build\x64\vc15\bin;
    C:\opencv\build\x64\vc14\lib;
    C:\opencv\build\x64\vc15\lib;C:\opencv\build\include\opencv2;

    %HALCONROOT%\bin\%HALCONARCH%;
    C:\Program Files\MVTec\HALCON-18.11-Progress\bin\x64-win64;

3.测试:
说明:C++调用Python有两种方式
    方式1:通过找到Python模块,类,方法,构造参数来调用
    方式2:通过构造出一个Python的脚本,用python引擎来执行
实例1:

# helloWorld.py

def printHello():
 print('hello World!')
 return 'hello World!'

# test.cpp
    
#include 
#include "windows.h"
#include 

using namespace std;

wchar_t* c2w(const char *str)
{
 size_t len = strlen(str) + 1;
 size_t converted = 0;
 wchar_t* wc = new wchar_t[len];
 mbstowcs_s(&converted, wc, len, str, _TRUNCATE);
 return wc;
}

void madeFile_i()
{
 system("swig -python -c++ C:\\Users\\Administrator\\source\\repos\\ProjectSwig\\ProjectSwig\\example.i");
}


int main()
{
    std::cout << "Hello World!\n";
 Py_SetPythonHome(c2w("C:\\ProgramData\\Anaconda3")); //如无配置PYTHONHOME环境变量要加上此句
 Py_Initialize(); /*初始化python解释器,告诉编译器要用的python编译器*/
 PyRun_SimpleString("import sys");
 PyRun_SimpleString("print('import sys ok!')");
 PyRun_SimpleString("sys.path.append('./')");

 PyRun_SimpleString("import helloWorld");       /*调用python文件*/
 PyRun_SimpleString("helloWorld.printHello()");/*调用python文件中的函数*/
 Py_Finalize();                                                     /*结束python解释器,释放资源*/
 system("pause");

}

 

实例2:
# test.cpp

#include 
#include "windows.h"
#include 

using namespace std;

int main()
{
 Py_Initialize();
    
 PyObject * pModule = NULL;// 声明变量
 PyObject * pFunc = NULL;   // 声明变量
 PyObject*pArg = NULL;


 PyRun_SimpleString("import sys");
 PyRun_SimpleString("sys.path.append('./')");

 pModule = PyImport_ImportModule("helloWorld");         //这里是要调用的文件名
 pFunc = PyObject_GetAttrString(pModule, "printHello");//这里是要调用的函数名
 pArg = PyEval_CallObject(pFunc, NULL);                      //调用函数

 char * result1;

 PyArg_Parse(pArg, "s", &result1);                                  //python类型转c++类型
 cout << "result=" << result1 << endl;

 Py_Finalize();
 return 0;
}

 

 

你可能感兴趣的:(C/C++)