一.Windows下生成动态库.pyd
在setup.py的同目录下使用python setup.py build_ext --inplace
二.在vscode的c++中使用.pyd文件(动态库)
1)配置python的环境
python -c "import sys; print(sys.executable)" #确定python安装位置
2)修改vscode中python的链接关系
2.1)修改tasks.json
2.2)修改launch.json
3)对应的vscode代码:
#include <iostream>
#include <Python.h>
using namespace std;
int main() {
Py_SetPythonHome(L"D:\\Conda\\envs\\yolo"); // 设置 Python 解释器路径
Py_Initialize(); // 初始化 Python 解释器
// 添加 .pyd 所在路径到 sys.path
//E:\Code\VScode\Project_test\mymodule.cp39-win_amd64.pyd
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('E:\\Code\\VScode\\Project_test')");
// 导入 .pyd 模块
PyObject* pModule = PyImport_ImportModule("mymodule"); // 不带 .pyd 后缀
if (!pModule) {
PyErr_Print();
std::cerr << "Failed to load module\n";
return 1;
}
// 获取函数
PyObject* pFunc = PyObject_GetAttrString(pModule, "add"); // 函数名
if (PyCallable_Check(pFunc)) {
PyObject* pArgs = PyTuple_Pack(2, PyLong_FromLong(10), PyLong_FromLong(32)); //传入两个参数10,32.相加为42
PyObject* pValue = PyObject_CallObject(pFunc, pArgs);
long result = PyLong_AsLong(pValue);
std::cout << "Result from Python: " << result << std::endl;
Py_XDECREF(pValue);
Py_DECREF(pArgs);
} else {
PyErr_Print();
std::cerr << "Function not callable\n";
}
Py_XDECREF(pFunc);
Py_DECREF(pModule);
Py_Finalize(); // 关闭解释器
cout<<"hello world";
return 0;
}
4)结果: