使用C++调用Python脚本的步骤和问题解决办法

实现了C++调用Python脚本的功能,在这个过程中遇到了很多问题。


  1)C++调用Python脚本的步骤:
     在使用Python系统前,必须使用Py_Initialize对其进行初始化。它会载入Python的内建模块并添加系统路径到模块搜索路径中。Py_Initialize(); 
     载入名为isBlur的脚本。pModule = PyImport_ImportModule("isBlur");
     找到函数名为isBlur的函数。pFunc = PyDict_GetItemString(pDict, "isBlur");
     设置参数。pArgs = Py_BuildValue("(s)","G:/20120108025737_JuKAr.jpg");
     调用参数。pRetVal = PyObject_CallObject(pFunc, pArgs);

     关闭Python。Py_Finalize();


   2)在这个步骤中最开始老是报错,提示cannot open file python27_d.lib,开始以为是debug没关导致的问题,在调试多次后,发现应该导入python的Lib。在添加AdditionalLibraryDirectories后,这个问题解决了。


    3)在载入脚本的时候多次失败,pModele老是为空,经过调试后发现是因为在python脚本中调用了opcv,numpy,scipy,scikit-image等一系列的模块,我只能先把这些模块安装上。问题在于如果使用pip自动安装,下载速度非常慢,而且经常安装不成功。于是我要先把安装包手动下载下来,再用pip安装。

     下载网站为:http://www.lfd.uci.edu/~gohlke/pythonlibs/


     而且有的模块下载下来是不能直接安装的,比如scikit_image-0.12.3-cp27-cp27m-win32.whl,安装不了的的原因是文件与系统平台不匹配,解决办法是通过import pip; print (pip.pep425tags.get_supported())命令查看pip支持的平台,比如('cp27', 'none', 'win32'),然后修改文件名为相应的支持的平台,比如scikit_image-0.12.3-cp27-none-win32.whl。这样文件就可以用pip安装了。


      解决了安装问题后,我手动下载这些模块,并且根据依赖安装相应的模块。这个过程也比较复杂,比如安装matplotlib模块就需要numpy, dateutil, pytz, pyparsing, cycler, setuptools等模块。在模块安装完之后又出现一些依赖问题,我在重装了numpy模块后,终于成功的实现了C++调用python脚本。


你可能感兴趣的:(使用C++调用Python脚本的步骤和问题解决办法)