在Mac OS X 10.6上缺少Python.h头文件

17

我试图在Mac OS X 10.6.8中使用Python 2.7.4和ctypes访问共享的C库。为了做到这一点,在我的C代码中,我需要包含#include <Python.h>。如果我尝试编译一个只包含这个包含语句的C脚本,称之为“sample.c”,那么我会得到:

$ gcc -shared -o sample.so sample.c
sample.c:1:20: error: Python.h: No such file or directory

由于我使用的是Mac 10.6,所以我安装的是Xcode 3.2.6,这是在此版本的OS X上可用的最新版本,而不需要支付升级到10.7并获取Xcode 4。有没有一种方法可以在不升级我的操作系统的情况下获得Python头文件呢?


使用ctypes或编写Python扩展库(使用Python.h)二者选其一即可,通常不建议两者兼备。 - Cairnarvon
5个回答

34

Python是Mac OS X上的一个框架,因此您需要:

#include <Python/Python.h>

你还需要使用-framework参数调用gcc,以在C语言中实际执行任何操作。

gcc -shared -o sample.so sample.c -framework Python

3
通常做法是:使用 #include <Python.h>,并设置正确的 -I 路径到 Python 头文件(其他答案已经解释了,例如 https://dev59.com/H2Qn5IYBdhLWcg3w7a2K#59074274)。如果在代码中使用 <Python/ 前缀进行包含,那么当使用第三方库时将无法工作(因为它们很可能会使用标准惯例)。 - ead

4

我不确定10.6.8系统,但是Python.h应该在

/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7

如果您安装了官方的python.org二进制文件,请尝试添加以下内容:
-I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7

gcc命令添加到您的命令行中,看看是否有效。

4

如果你使用Brew安装了Python,那么检查头文件的位置可能是值得的。 尝试 I/usr/local/Cellar/python/...


我的完整路径是:/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Headers - Guillaume

2

通过以下命令安装Xcode命令行工具,我成功解决了我的问题:

xcode-select --install

2
另一种方法是在gcc调用中添加`python-config --include`。它会扩展为-I/usr/...,因此...
gcc -shared -o sample.so sample.c `python-config --include`

还可以检索其他选项,例如`python-config --cflags --ldflags`

python-configpython3-config通常在brew install python之后可用。反引号是特定于bash的。要查看它将输出什么(例如,当不使用bash时),请使用

python-config --include

请提供一个非标准模块的 python-config 输出,该模块目前无法在3.8版本中正常工作。 - dlamblin

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