在 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
目录下。
我需要围绕一些 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
目录下。