尝试编译C扩展模块时缺少Python.h

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试编译C扩展模块时缺少Python.h相关的知识,希望对你有一定的参考价值。

我正在关注this tutorial如何使用C \ C ++代码扩展Python。

对我而言,名为“使用GCC为Microsoft Windows构建扩展模块的部分”失败,并出现以下错误:

fatal error: Python.h: No such file or directory

名为“使用Microsoft Visual C ++构建扩展模块的部分”也因类似的错误而失败:

fatal error C1083: Cannot open include file: 'Python.h': No such file or directory

我该怎么解决?

答案
  1. 您是否拥有python dev文件,以便可以找到Python.h?
  2. 您是否已将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您安装了它。

另一答案

对于Linux,Ubuntu用户要在编译时解决缺少Python.h的问题,只需在终端中运行以下命令以安装python开发包:

在终端:sudo apt-get install python-dev

祝你好运

另一答案

Python官方文档已经明确了。签出here

头文件通常与Python一起安装。在Unix上,它们位于目录prefix / include / pythonversion /和exec_prefix / include / pythonversion /中,其中prefix和exec_prefix由Python的配置脚本的相应参数定义,版本为'%d。%d'%sys。版本信息[:2]。在Windows上,标头安装在prefix / include中,其中prefix是为安装程序指定的安装目录。

要包含标题,请将两个目录(如果不同)都放在编译器的包含搜索路径中。不要将父目录放在搜索路径上,然后使用#include;这将在多平台构建上中断,因为前缀下与平台无关的头包含来自exec_prefix的平台特定的头。

并且它们提供了一种方便的方法来获取应传递给编译器的正确cflag。 here

例如,这是我运行命令后得到的内容

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

将这些标志传递给编译器,它将起作用。

以上是关于尝试编译C扩展模块时缺少Python.h的主要内容,如果未能解决你的问题,请参考以下文章

包括使用 cx_freeze 编译的扩展

用C或C ++扩展(翻译)

php中添加新模块支持

如何使用 distutils 安装 Python 扩展模块?

LAMP架构-PHP动态扩展模块

PHP扩展模块安装