【问题标题】:Python.h header file missing on Mac OS X 10.6Mac OS X 10.6 上缺少 Python.h 头文件
【发布时间】:2013-05-03 11:27:46
【问题描述】:

我正在尝试在带有 Python 2.7.4 的 Mac OS X 10.6.8 上使用 ctypes 访问 Python 中的共享 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)。两者都做并不是一个好主意。

标签: python xcode macos osx-snow-leopard header-files


【解决方案1】:

Python 是 Mac OS X 上的一个框架,所以你需要,

#include <Python/Python.h>

您还需要使用 -framework 参数调用 gcc 才能在 C 中实际执行任何操作,

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

【讨论】:

  • 谢谢!这正是我所需要的。
  • 约定是:使用#include &lt;Python.h&gt; 并将正确的-I-path 设置为Python-headers(正如这里的其他答案所解释的那样,例如stackoverflow.com/a/59074274/5769463)。一旦使用第三方库(很可能会使用标准约定),使用 &lt;Python/ 前缀包含将不起作用。
【解决方案2】:

我不确定 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 命令,看看它是否有效。

【讨论】:

    【解决方案3】:

    如果您使用 Brew 安装了 Python,则可能值得检查您的标头所在的位置。 试试I/usr/local/Cellar/python/...

    【讨论】:

    • 我的完整路径是:I/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Headers
    【解决方案4】:

    另一种方法是将`python-config --include` 添加到gcc 调用中。它将扩展到-I/usr/...,所以

    gcc -shared -o sample.so sample.c `python-config --include`
    

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

    【讨论】:

      猜你喜欢
      • 2015-05-24
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      相关资源
      最近更新 更多