12

我正在关注如何使用 C\C++ 代码扩展 Python 的本教程。

名为“使用 GCC for 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

我应该怎么做才能解决这个问题?

4

3 回答 3

51

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

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

祝你好运

于 2011-06-08T20:56:27.160 回答
19
  1. 你有 python 开发文件以便你可以找到 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 替换为您安装的位置它。

于 2010-11-04T14:30:48.120 回答
0

Python官方文档已经说得很清楚了。在这里查看

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

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

他们提供了一种方便的方法来获取我们应该传递给编译器的正确 cflags。这里

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

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

将这些标志传递给编译器,它就会工作。

于 2020-02-18T23:20:24.420 回答