【问题标题】:Python.h: No such file or directoryPython.h:没有这样的文件或目录
【发布时间】:2012-06-17 23:17:13
【问题描述】:

我最近在运行 Ubuntu 12.04 LTS 的 Macbook Pro 上安装了用于 C++ 开发的 KDevelop 4。

我想在我的 C++ 代码中嵌入 Python 应用程序。为此,需要包含 Python.h 头文件。所以,我做到了。

#include <iostream>
#include <Python.h>

int main(int argc, char **argv) {
    Py_Initialize();
    return 0;
}

但是,在运行时,我收到了来自 IDE 的以下响应:

fatal error: Python.h: No such file or directory

但是,我很快就发现了问题。我还没有下载 python-dev 包。所以,我做到了。我又跑了,但同样的错误又出现了。所以,我认为这一定是KDevelop不包含头文件的问题。因此,我将相关文件夹添加到包含路径中,KDevelop 通过删除上面代码中第二个包含语句下方的红色下划线立即意识到这一点。

但是,问题仍然存在。我犯了同样的错误。希望你们能提供任何帮助或意见:-)

非常感谢。

编辑:我之前错过的一些细节是 KDevelop 正在为我的项目使用 cmake。我想我的问题发生的原因是因为 cmake 不知道适当的编译器和链接器路径。在为 cmake 设置正确路径方面提供任何帮助,我将不胜感激。

【问题讨论】:

  • @ddzialak - 是的,我在问这个问题之前看过这个问题。这个问题对我没有帮助的原因是我的 Python.h 文件实际上存在于 /usr/include/python2.7 中。我手动检查了它,当我在编辑器中单击 Python.h 时,它会打开文件。
  • @ShubhamGoyal 你能帮我解决这个问题吗? stackoverflow.com/questions/31577539/…

标签: c++ python include cmake kdevelop


【解决方案1】:

在您的 CMakeLists.txt 中,尝试添加以下内容:

find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
target_link_libraries(<your exe or lib> ${PYTHON_LIBRARIES})

有关命令的详细信息,请运行:

cmake --help-module FindPythonLibs
cmake --help-command find_package
cmake --help-command include_directories
cmake --help-command target_link_libraries

【讨论】:

  • 是的,这行得通。实际上,在看到您的答案和大量阅读 CMake 之后,我已经让它工作了,但解决方案是一样的:D
  • @ShubhamGoyal 不错。实际上,查看您的 CMakeLists.txt 让我注意到我在原始答案中忘记了一组大括号!现已修复。
  • @Fraser 我也有类似的问题。你能帮我吗? stackoverflow.com/questions/31577539/…
  • --ldflags 怎么样?
  • @Fraser 我有多个CMakeLists.txt 那么我应该在哪里更改它??
【解决方案2】:
sudo apt-get install pythonX.X-dev

例如 3.8

sudo apt-get install python3.8-dev

感谢 Cristianjs19 的评论。

原答案:

sudo apt-get install python2.7-dev

在“Python.h:没有这样的文件或目录”问题上为我工作

【讨论】:

  • 以下是在 CentOS 中对我的帮助:sudo yum search python 找到合适的 -devel 包,然后 sudo yum install python26-devel.x86_64 找到我特定版本的 Python。
  • sudo apt-get install pythonX.X-dev (我的 X.X 版) 以防万一...
  • windows用户怎么样
【解决方案3】:

您希望在编译行中包含以下内容:

`python-config --cflags`

链接线上的这个:

`python-config --ldflags`

【讨论】:

  • 对不起,如果我是这里的菜鸟,但您能否详细说明一下在这种情况下编译行和链接行是什么意思?由于我使用的是IDE,所以我没有在终端上编译和链接。
  • 您的 IDE 在某处设置了包含路径、库路径以及编译器和链接器标志。运行上面的命令 - 第一个为您提供 -I 指令(包括路径)和编译器标志,第二个对链接器执行相同的操作。将它们放入 IDE 中的适当设置中。
  • 嗯...KDevelop 正在为我的项目使用 cmake。但我以前从未使用过 cmake,希望能在此处设置路径方面提供一些帮助。
  • 对不起,我帮不上忙。我能做的最好的就是把你推荐给userbase.kde.org/KDevelop4/Manual/…
  • 这在 Fedora 27 上帮助了我。python-config 没有安装,但 Fedora 知道该命令并询问我是否要安装它。安装后还安装了Python.h!解决这两个需求的包是python2-devel 和一些与RPM 相关的包(python-rpm-macrospython2-rpm-macrospython3-rpm-generators)。
【解决方案4】:

Python.h 很可能不在您的构建系统的包含路径中。你可以通过运行找出你的 Python.h 在哪里

dpkg -L python-dev | grep Python.h

这也将验证 python-dev 包是否实际安装了 Python.h。

我这里没有 kdevelop,但是大多数 IDE 都有一个设置,您可以在其中指定构建系统使用的包含路径,并且您应该能够添加 Python.h 所在的路径。

编辑:

正如 Nikolai 所暗示的,您还需要为链接阶段添加正确的库路径。 (python-config --ldflags 的输出)。

【讨论】:

  • 我已经确认 python-dev 包确实安装了 Python.h 文件。问题是我不知道在哪里或如何在 cmake 中添加正确的库路径。将不胜感激这方面的任何帮助。我是cmake的完整初学者。我第一次听到这个词是在发布这个问题之后。
【解决方案5】:

Linux Ubuntu Putty 用户试试这个:

sudo apt-get update
sudo apt-get install python-dev

然后编译它

gcc -o check xyz.c -I/usr/include/python2.7/ -lpython2.7

然后运行它

./check 

【讨论】:

    【解决方案6】:

    我假设它已经安装了。找到路径:

    find / -iname python.h
    

    当你这样做时,在编译时添加

    -I python_h_path
    

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2017-12-13
      • 1970-01-01
      • 2021-02-26
      • 2021-09-19
      相关资源
      最近更新 更多