编译C扩展模块时缺失Python.h

14 投票
4 回答
50637 浏览
提问于 2025-04-16 06:34

我正在按照这个教程学习如何用C或C++代码扩展Python。

在“使用GCC为微软Windows构建扩展模块”这一部分,我遇到了以下错误:

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

而“使用微软Visual C++构建扩展模块”这一部分也出现了类似的错误:

fatal error C1083: Cannot open include file: 'Python.h': No such file or directory

我该怎么做才能解决这个问题呢?

4 个回答

0

Python的官方文档已经说得很清楚了。你可以在这里查看。

头文件通常会和Python一起安装。在Unix系统上,这些文件放在prefix/include/pythonversion/和exec_prefix/include/pythonversion/这两个目录下,其中prefix和exec_prefix是由Python的配置脚本定义的,而version是'%d.%d' % sys.version_info[:2]。在Windows系统上,头文件则安装在prefix/include目录下,prefix是安装程序指定的安装目录。

要使用这些头文件,你需要把这两个目录(如果不同的话)放到编译器的搜索路径中。不要把父目录放到搜索路径中,然后再用#include;这样在多平台构建时会出问题,因为在prefix下的独立平台头文件会包含exec_prefix下的特定平台头文件。

他们还提供了一种方便的方法来获取我们应该传递给编译器的正确cflags。你可以在这里找到。

举个例子,运行这个命令后,我得到了以下内容:

root@36fd2072c90a:/# /usr/bin/python3-config --cflags
-I/usr/include/python3.5m -I/usr/include/python3.5m  -Wno-unused-result -Wsign-compare -g -fstack-protector-strong -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes

把这些标志传递给编译器,它就能正常工作了。

53

对于使用Linux和Ubuntu的朋友们,如果在编译的时候遇到缺少Python.h这个问题,可以在终端里运行下面的命令来安装Python的开发包:

在终端中输入:sudo apt-get install python-dev

祝你好运!

19
  1. 你有没有安装Python的开发文件,这样你才能找到Python.h这个文件?
  2. 你有没有告诉编译器Python.h文件的位置?如果你用的是gcc,通常是通过一个-I后面跟路径的方式来包含这个文件。

找出这两个问题中哪个出错了,就能解决你的问题。

根据你提供的文章:

gcc -c hellomodule.c -I/PythonXY/include

gcc -shared hellomodule.o -L/PythonXY/libs -lpythonXY -o hello.dll

他们假设你把Python安装在默认位置c:\pythonXY(这里的X是大版本号,Y是小版本号,举个例子就是Python26)。如果你把Python装在其他地方,就把/PythonXY换成你实际安装的路径。

撰写回答