0

0

C++怎么调用Python C++和Python混合编程【指南】

尼克

尼克

发布时间:2026-02-28 13:49:02

|

868人浏览过

|

来源于php中文网

原创

根本原因是c++项目未正确配置python的c api环境,需确保安装开发包、正确设置头文件路径和链接库、初始化解释器并管理gil、处理引用计数、保证dll可见性及运行时匹配。

c++怎么调用python c++和python混合编程【指南】

Python.h 头文件找不到或编译失败

根本原因是 C++ 项目没连上 Python 的 C API 头文件和链接库,不是“调用方式不对”,而是环境没搭对。

  • 确认已安装对应版本的 python3-dev(Ubuntu/Debian)或 python3-devel(CentOS/RHEL),比如 Python 3.10 就要装 python3.10-dev
  • g++ 编译时必须显式加 -I 指向头文件路径(如 /usr/include/python3.10),不能只靠 #include <python.h></python.h>
  • 链接阶段漏掉 -lpython3.10 或路径不对(-L/usr/lib/python3.10/config-3.10-x86_64-linux-gnu)会导致 undefined reference 错误
  • Mac 上用 python3-config --includespython3-config --ldflags 获取准确参数,别硬写路径

Py_Initialize() 后 import 失败或 Segmentation Fault

Python 解释器启动了,但模块路径、运行时状态或线程环境没准备好,一 import 就崩。

  • 调用 Py_Initialize() 后必须立刻调用 PyEval_InitThreads()(Python
  • sys.path 默认不包含当前目录,用 PyRun_SimpleString("import sys; sys.path.insert(0, '.');") 手动加,否则 import mymodule 找不到
  • 避免在多线程 C++ 环境中反复调用 Py_Initialize()/Py_Finalize():它不是线程安全的,且多次初始化会破坏内部状态
  • 如果 Python 代码里用了 numpytorch,确保这些包已在系统 Python 环境中 pip 安装,C++ 不会自动帮你装依赖

从 C++ 传字符串/数组给 Python 函数

不能直接把 std::stringstd::vector<float></float> 塞进 Python,得转成对应的 PyObject*,否则内存越界或类型错误。

摩笔天书
摩笔天书

摩笔天书AI绘本创作平台

下载
  • 字符串用 PyUnicode_FromString()(UTF-8)或 PyUnicode_FromWideChar()(wchar_t),别用 PyBytes_FromString() 除非你明确要 bytes
  • float 数组推荐用 PyArray_SimpleNewFromData()(需 NumPy C API),比手动构造 list 快且零拷贝;记得设置 PyArray_ENABLE_CHECKING 调试时捕获 shape/mem 错误
  • 传完对象后注意引用计数:Py_DECREF() 掉临时创建的 PyObject*,否则内存泄漏——尤其在循环中反复调用时
  • Python 函数返回 None 却当成有效对象解包,会触发 SystemError: NULL object passed to Py_BuildValue

Windows 下 DLL 加载失败或找不到 python310.dll

不是代码问题,是动态链接时 runtime 找不到 Python 的 DLL,报错像 ImportError: DLL load failed while importing _ctypes 或直接 crash。

立即学习Python免费学习笔记(深入)”;

  • 确保 python310.dll(版本号按实际)在系统 PATH 中,或和你的 exe 放同一目录;不要只复制 python3.dll(那是 stub)
  • Visual Studio 项目属性里,C/C++ → General → Additional Include Directories 填 Python 的 include 路径,Linker → General → Additional Library Directories 填 libs 目录(不是 Lib!)
  • Debug/Release 运行时必须匹配:Python 官方版是 MD(动态 CRT),你的 C++ 项目也得设成 /MD,设成 /MT 会因 CRT 冲突导致随机崩溃
  • dumpbin /dependents yourapp.exe 检查是否真链接了 python310.dll,而不是静态链接了 libpython
C++ 调 Python 最容易卡在环境链路上,而不是语法。头文件路径、链接库名、DLL 可见性、GIL 状态——这四个点任何一个没对齐,都会表现为“调不通”“崩得莫名其妙”。别急着改 Python 逻辑,先用 python3-config --ldflagsdumpbin 确认底层连接真实存在。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

371

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

429

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

792

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

367

2025.07.23

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

870

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

592

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

105

2025.10.23

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

248

2023.09.22

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

0

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号