Python.h:没有这个文件或目录

46
我最近在我的Macbook Pro上安装了KDevelop 4,用于C++开发,运行的是Ubuntu 12.04 LTS。
我想在我的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立即通过删除代码中第二个include语句下面的红色下划线来识别出来。
但是问题仍然存在。我得到了相同的错误。非常感谢你们能提供任何帮助或意见 :-)
(KDevelop正在使用CMake进行我的项目。)

https://dev59.com/Bm855IYBdhLWcg3w5Igb - ddzialak
@ddzialak - 是的,我在提问之前看了那个问题。那个问题不能帮助我是因为我的Python.h文件实际上位于/usr/include/python2.7。我手动检查了它,当我在编辑器中点击Python.h时,它会打开该文件。 - Shubham Goyal
@ShubhamGoyal,你能帮我解决这个问题吗?http://stackoverflow.com/questions/31577539/how-can-i-incorporate-cmake-file-when-building-with-distutils-python - AnOldSoul
6个回答

80

在你的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 - Shubham Goyal
@ShubhamGoyal 不错。事实上,看了你的CMakeLists.txt后我发现我在原始答案中忘记了一组括号!现在已经修复了。 - Fraser
@Fraser 我有一个类似的问题。你能帮我解决一下吗?http://stackoverflow.com/questions/31577539/how-can-i-incorporate-cmake-file-when-building-with-distutils-python - AnOldSoul
--ldflags 怎么样? - ar2015
@Fraser,我有多个CMakeLists.txt文件,那我应该在哪里更改它呢? - jatin fl
find_package(PythonLibs REQUIRED) 对我不起作用,相反,CMake 的新文档建议使用 find_package(Python COMPONENTS Development REQUIRED),这对我有用。 - maidamai

61
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: No such file or directory”问题有用


1
以下是我在CentOS上的解决方法:使用sudo yum search python命令查找适当的-devel软件包,然后使用sudo yum install python26-devel.x86_64命令安装我的特定版本的Python。 - Vladimir Obrizan
3
sudo apt-get install pythonX.X-dev(我的版本是X.X),以防万一... - Cristianjs19
Windows用户怎么样? - greendino

15
你想在编译行上包含以下内容:
`python-config --cflags`

并且在链接行上加入这个:

`python-config --ldflags`

非常抱歉,如果我在这里表现得像个新手,请问您能否详细说明一下在这种情况下编译行和链接行是什么意思?由于我正在使用IDE,因此我不是在终端上进行编译和链接。 - Shubham Goyal
1
你的IDE在某个地方有包含路径、库路径、编译器和链接器标志的设置。运行上面的命令 - 第一个命令给出了-I指令(包含路径)和编译器标志,第二个命令也是同样的操作,但是是针对链接器的。将它们放入你的IDE的适当设置中。 - Nikolai Fetissov
哦,KDevelop 正在为我的项目使用 cmake。但我以前从未使用过 cmake,并且希望得到一些关于设置路径的帮助。 - Shubham Goyal
抱歉,我对这些无法提供帮助。我能做的最好的是引用 http://userbase.kde.org/KDevelop4/Manual/Building_%28compiling%29_projects_with_custom_Makefiles - Nikolai Fetissov
这对我在 Fedora 27 上很有帮助。尽管没有安装 python-config,但 Fedora 知道该命令并询问是否要安装它。安装后还安装了 Python.h!解决这两个需求的软件包是 python2-devel 和一些 RPM 相关软件包(python-rpm-macrospython2-rpm-macrospython3-rpm-generators)。 - wallyk

6

很可能你的构建系统中没有包含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方面是一个完全的新手。这个术语是我在发布这个问题之后第一次听说的。 - Shubham Goyal

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 

4

我假设它已经安装完成。使用以下命令查找路径:

find / -iname python.h

当您这样做后,在编译时添加以下内容。
-I python_h_path

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接