在MFC中嵌入Python:Windows嵌入包无python.h的调用方案咨询
解决方案
关于Python嵌入包的限制
Windows Python嵌入包是面向直接运行Python脚本的分发包,本身不包含开发所需的python.h头文件和链接库,所以无法直接调用Py_Initialize()、PyRun_SimpleString()这类C API函数,默认只能通过启动python.exe的方式执行脚本。
两种实现路径
1. 用C API调用(和本地安装Python时的方式一致)
如果一定要用C API,需要补充开发文件,步骤如下:
- 下载对应版本的32位Python安装包(不是嵌入包),安装后找到安装目录下的
include文件夹(含python.h)和libs文件夹(含python3xx.lib,xx对应版本号) - 将
include和libs里的文件复制到你的MFC项目目录,在项目属性中配置:- 包含目录添加
include路径 - 库目录添加
libs路径 - 链接器输入中添加
python3xx.lib
- 包含目录添加
- 打包时,把嵌入包里的
python3xx.dll、python.exe及相关依赖文件(如vcruntime140.dll等)和你的MFC程序放在一起,用户无需安装Python即可运行
2. 通过进程调用嵌入包的python.exe
如果接受进程调用的方式,直接用嵌入包即可,步骤如下:
- 将32位Python嵌入包解压到你的MFC程序的输出目录
- 用
CreateProcess或ShellExecuteEx(比system()更可控)启动python.exe执行脚本,示例代码:SHELLEXECUTEINFO sei = {0}; sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.fMask = SEE_MASK_NOCLOSEPROCESS; sei.lpVerb = _T("open"); sei.lpFile = _T("python.exe"); sei.lpParameters = _T("your_script.py"); // 替换为你的脚本路径 sei.nShow = SW_HIDE; // 可选:隐藏控制台窗口 if (ShellExecuteEx(&sei)) { WaitForSingleObject(sei.hProcess, INFINITE); // 等待脚本执行完成 CloseHandle(sei.hProcess); }
内容的提问来源于stack exchange,提问作者呂澤阜
相关产品推荐
相关产品推荐

