目录
0、参考文档及博客
重要的东西放前面:
用C或者C++编写模块的官方文档:
https://docs.python.org/3/extending/index.html
我配置环境时的参考博客:
https://blog.youkuaiyun.com/nanguabing007/article/details/89394541
1、环境配置步骤
这个网上有太多教程了,总结一下就是:
0、VS项目配置里,32位系统配置选x86,64位系统配置选x64,否则无法调用pyd等动态库,导致出现调用自己写的简单python代码可以,但是无法调用numpy等第三方库的问题。调用不了numpy还不会报错,只会在调用完PyImport_ImportModule函数之后返回NULL,极难调试。选Debug版就要在链接器配置里连接python36_d.lib,选release版要链接python36.lib。
1、找python源代码编译一遍,获得对应的pythonxx_d.lib文件。这里遇到过的问题主要是:(1)VS2017编译报错,显示少了个SDK。
解决方法是:用Visual Studio Installer下载所需的SDK。
2、将编译完成后出现的PcBuild->win32->python36_d.lib文件移动到相应的位置,在VS中配置好配置->链接器->输入。这里遇到的主要问题是:(1)运行调用python文件的代码时显示缺少python的动态链接文件。
解决方法是:找到python36_d.dll,移动到C:\Windows\System32文件夹下面。
3、运行调用python的C++代码。这里遇到的主要问题是:(1)调用Py_Initialize函数时,报错如下:
“Fatal Python error: Py_Initialize: unable to load the file system codec ModuleNotFoundError: No module named ‘encodings’”。
解决方法是在系统环境变量里加上这条:
网上有教程说要设置PYTHONHOME才能用,但是我试了一下,只设置PYTHONPATH就够了
注意:设置完环境变量之后要重启才能生效。
2、C++调用python的方法
代码框架:(同样来源于上面这篇博客,可用于测试环境配置成功与否)
#include <Python.h>
#include<iostream>
using namespace std;
int main()
{
Py_SetPythonHome((wchar_t*)("D:\anaconda\envs\mworks_dis"));
/**
这句语句是在添加python.exe所在路径
**/
Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
if (!Py_IsInitialized())
{
printf("初始化失败!");
return 0;
}
else {
PyRun_SimpleString("import sys");
PyRun_SimpleString(