在 CentOS 上为 Python3 编译 C 扩展

Compiling C extensions for Python3 on CentOS

我需要围绕一些 C 函数编写 python 接口包装器,这需要 Python.h 头文件。我想确保我得到正确的 Python.h.

我在 CentOS 6.6 工作并决定使用 Python 3.4 以避免使用 OS 的 python 发行版。在线资源建议从 python34-devel 获取正确的 Python.h ,但此软件包不适用于 Centos 6,即使通过 EPEL 存储库也是如此。另外,我被迫编译并且 install python from source, and this thread 似乎建议 python34-devel 在这种情况下甚至可能没有帮助。

如何找到正确的 Python.h 以便为我的 Python 配置编译 C 库?

提前致谢

如果你正确地做事并为你的包装器制作了一个完整的可安装包,setup.py,那么你甚至不需要知道包含的位置;因为您的 python3.4 可执行文件会知道它们的位置。

至少你的 setup.py 可能类似于

from setuptools import setup, Extension

c_ext = Extension('mypackage._mymodule.c',
                  sources = ['mypackage/_mymodule.c'],
                  )

setup(name='mypackage',
      version='1.0',
      description='...',
      long_description='...',
      packages=['mypackage']
      ext_modules=[c_ext])

然后您可以将 C 扩展源存储在 mypackage/_mymodule.c 中,并让 mypackage/__init__.py 或一些 python 模块为 C 扩展本身编写漂亮的包装器(因为有些东西只是为了在 C 中做这件事很乏味);至少这样就可以了

from mypackage._mymodule import *

现在要安装此扩展,您只需执行 python3.4 setup.py install,它会使用适合的任何包含目录 编译时选项自动编译您的扩展那个安装,安装到site-packages目录下。