实现了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后,这个问题解决了。
下载网站为: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脚本。