迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

解决 C++ 中错误 Python.h: No Such File or Directory

作者:迹忆客 最近更新:2023/06/29 浏览次数:

本文将解释如何解决错误 'Python.h': No such file or directory。 当我们尝试在 C++ 中嵌入 Python 代码,但编译器无法在系统内部找到对 Python 的引用时,通常会发生这种情况。


C++ 中 'Python.h': No such file or directory 错误的原因

下面是一个使用 Python 代码的 C++ 程序。

#include <stdio.h>
#include <conio.h>
#include <Python.h>

int main()
{
    PyObject* pInt;

    Py_Initialize();

    PyRun_SimpleString("print('Hello World from Embedded Python!!!')");

    Py_Finalize();

    printf("\nPress any key to exit...\n");
    if (!_getch()) _getch();
    return 0;
}

当编译该程序时,它给出错误 'Python.h': No such file or directory

Build started...
1>------ Build started: Project: Python into Cpp, Configuration: Debug x64 ------
1>1.cpp
1>C:\Users\Win 10\source\repos\Python into Cpp\1.cpp(3,10): fatal error C1083: Cannot open include file: 'Python.h': No such file or directory
1>Done building project "Python into Cpp.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

多种原因导致 'Python.h': No such file or directory

  1. 系统内部未安装Python。

    Python 是第三方企业软件,不附带标准 Windows 和 C++ 编译器安装。 它必须使用正确的设置进行安装并链接到 C++ 编译器。

  2. C++ 编译器找不到 Python。

    如果编译器通过 IDE 或 mingw4 运行,它只能检测到标准 C++ 包含标准安装附带的包。

    需要将第三方库添加到 IDE 包含文件和链接器文件中。

    解决上述问题需要执行三个步骤。

    1. 自定义安装 Python,使其能够嵌入 IDE 中。
    2. 将 Python 路径添加到 IDE 包含和链接器路径。
    3. 在 C++ 代码中编写 Python 代码并编译它们。

允许将其代码嵌入 C++ 中的 Python 安装

如果系统中没有Python,或者安装并链接了Python,但仍然出现错误“Python.h”:没有这样的文件或目录,这是因为Python安装没有下载调试二进制文件。

建议正确卸载Python,然后重新安装,以解决错误“Python.h”:没有这样的文件或目录。

前往 Python 网站并下载最新的 Python 版本。 如果需要某个版本,请前往所有版本下载部分。

本文演示了 Windows 操作系统中的步骤,因此合适的选择是使用 Windows 安装程序(64 位或 32 位)。 如果使用现代 PC,建议使用 64 位版本。

下载完成后,运行安装程序,然后选择自定义安装。 “立即安装”选项将使用默认设置安装 Python,但保留调试二进制文件以允许将其嵌入到 IDE 中。

勾选要求将 Python X.X(版本)添加到 PATH 的框,然后单击“自定义安装”。

定制安装

在下一页上,标记所有框,然后单击下一步。

可选功能

在第三个菜单中,勾选“下载调试二进制文件”框,然后单击“安装”。 Python 将安装在所选目录中。

调试库


将 Python 路径添加到 IDE 的包含和链接器的步骤

任何标准安装中未附带 C++ 的第三方库都必须引用 IDE。 IDE无法自动搜索和检测系统内部的第三方库。

这就是导致错误“Python.h”的原因:没有这样的文件或目录。

虽然当包库存储在 C++ 脚本所在的同一目录中时 IDE 可以搜索文件,但应在程序的 #include<> 标头中提及其路径。

但以这种方式存储依赖项是一种不好的做法。

需要做的是,库的路径应该链接到 IDE,以便可以以包含标准头文件的方式包含它,而无需提供源代码的文件路径。

任何标准安装中未附带 C++ 的第三方库都必须引用 IDE。 IDE无法自动搜索和检测系统内部的第三方库。

这就是导致错误“Python.h”的原因:没有这样的文件或目录。

首先,需要一个IDE。 建议使用 Visual Studio(2017 或更高版本),本文将介绍相同的内容。

也可以使用任何其他 IDE,大多数步骤都是相同的,但 Visual Studio 使其变得简单。

在系统中安装Visual Studio

Visual Studio 的安装程序可以从这里下载。 下载64位社区版本后,安装软件,包括C++开发选项。

安装完成后,创建一个新项目。

对于以前从未使用过 Visual Studio 的读者来说,该窗口可能看起来有些吓人,但无需担心。 大多数需要的功能都在前面,本文将指导其余的功能。

创建一个项目,并为其命名,例如“Python in cpp”。 项目创建后,主窗口将如下所示:

主窗口

如果只是黑屏,请按 Ctrl+Alt+l,解决方案资源管理器将打开。 解决方案资源管理器显示该项目可用的所有文件和依赖项。


添加要包含的 Python 路径和链接器

在此步骤中,将包含 Python 路径并将其链接到 Visual Studio,以便 IDE 知道在写入 #include <python.h> 时要查找的位置。

此步骤的先决条件是了解 Python 的安装目录并使其在另一个窗口中保持打开状态。 现在转到“调试”>“项目名称”>“属性”(它将显示项目的名称,而不是项目名称)。

项目属性

在项目属性窗口中,转到 C/C++ > General > Additional Include Directories,单击最右侧的小下拉按钮,然后单击 <Edit...>

C++ 通用

将打开“附加包含目录”对话框。 在这里,双击第一个空白处,粘贴系统内Python安装目录中的include文件夹的路径,然后单击“确定”。

附加包含目录

添加包含目录的路径后,转到“链接器”>“常规”>“其他库目录”。 与上一步一样,单击 <Edit...>

其他类库目录

现在,libs 文件夹应该添加到链接器中。 该文件夹也可以在包含文件夹所在的 Python 目录中找到。

添加后,单击“确定”,然后单击“应用”。

添加lib文件夹


用 C++ 编写 Python 代码并编译它们

添加包含路径和链接器路径后,必须编译示例程序来检查上述步骤是否正确执行,并且不会再次遇到“Python.h”:No such file or directory错误。

转到解决方案资源管理器并右键单击源文件。 单击“添加”>“新项目”,为文件命名并单击“添加”。

这个新文件将包含将要编译的代码。

下面是本文开头使用的引发错误的 C++ 程序。

#include <stdio.h>
#include <conio.h>
#include <Python.h>

int main()
{
    PyObject* pInt;

    Py_Initialize();

    PyRun_SimpleString("print('Hello World from Embedded Python!!!')");

    Py_Finalize();

    printf("\nPress any key to exit...\n");
    if (!_getch()) _getch();
    return 0;
}

现在,当通过单击顶部的绿色播放按钮编译文件时,我们得到输出:

Hello World from Embedded Python!!!

Press any key to exit...

总结

本文解释了解决错误 'Python.h': No such file or directory 的步骤。 读完本文后,读者可以安装Python和Visual Studio并将它们链接到Python库。

上一篇:使用 Pickle 在 Python 中保存和加载对象

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Pickle 在 Python 中保存和加载对象

发布时间:2023/06/29 浏览次数:67 分类:Python

本文演示了如何在 Python 中保存和重新加载对象。 我们还将了解如何使用 Python 进行 Pickling 和 Unpickling。 此外,我们将看到 Pickling 的优点和缺点。

Python中defaultdict的使用

发布时间:2023/06/29 浏览次数:126 分类:Python

今天的文章讨论 defaultdict 容器并使用代码示例演示其用法。Python 中的 defaultdict 与 dict defaultdict 是一个类似字典的容器,属于 collections 模块。

Python 中的 with 语句

发布时间:2023/06/29 浏览次数:83 分类:Python

本篇文章将介绍with语句的功能及其在Python中的应用。在Python中使用with语句 该语句本质上用于帮助处理异常并在使用资源时清理资源。 它确保代码正确执行并随后清理资源。

Python 单步执行代码

发布时间:2023/06/29 浏览次数:145 分类:Python

在本文中,我们将讨论使用 Python 调试器单步调试代码。 我们将从头开始解释一个名为 PDB 的命令行工具。 我们还将学习如何在 Python IDLE 的帮助下逐步执行代码。

Python 编辑距离

发布时间:2023/06/29 浏览次数:67 分类:Python

今天,我们将学习Python中的编辑距离。 我们还将探讨字符串的插入、删除、替换和递归实现。在 Python 中编辑距离 编辑距离是将一个字符串转置为另一个字符串所需的量。

在 Python 中解析 JSON 对象数组

发布时间:2023/06/28 浏览次数:57 分类:Python

由于浏览器可以快速解析 JSON 对象,因此它们有助于在客户端和服务器之间传输数据。 本文将介绍如何使用Python的JSON模块传输和接收JSON数据。

在 Python 中等待 5 秒

发布时间:2023/06/28 浏览次数:152 分类:Python

本篇文章将讨论如何在 Python 中等待 5 秒。在 Python 中使用 time.sleep() 函数等待 5 秒 Python 的 time 模块提供了存储和操作时间的功能和对象。

Python 中的模糊字符串匹配

发布时间:2023/06/28 浏览次数:89 分类:Python

今天,我们将学习如何使用 thefuzz 库,它允许我们在 python 中进行模糊字符串匹配。 此外,我们将学习如何使用 process 模块,该模块允许我们借助模糊字符串逻辑有效地匹配或提取字符串。Py

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便