编译C扩展模块时缺失Python.h
我正在按照这个教程学习如何用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 个回答
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
把这些标志传递给编译器,它就能正常工作了。
对于使用Linux和Ubuntu的朋友们,如果在编译的时候遇到缺少Python.h这个问题,可以在终端里运行下面的命令来安装Python的开发包:
在终端中输入:sudo apt-get install python-dev
祝你好运!
- 你有没有安装Python的开发文件,这样你才能找到Python.h这个文件?
- 你有没有告诉编译器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换成你实际安装的路径。