我试图使用C扩展名文件构建共享库,但首先必须使用以下命令生成输出文件:

gcc -Wall utilsmodule.c -o Utilc

执行命令后,我收到以下错误消息:

> utilsmodule.c:1:20: fatal error: Python.h: No such file or directory
compilation terminated.

我已经在互联网上尝试了所有建议的解决方案,但问题仍然存在。我对Python.h没有问题。我设法在我的机器上找到了该文件。


当前回答

在Ubuntu上,我运行的是Python 3,我必须安装

sudo apt-get install python3-dev

如果要使用未链接到python3的Python版本,请安装相关的python3.x-dev包。例如:

sudo apt-get install python3.5-dev

其他回答

在我的例子中,在Ubuntu中修复它的方法是安装libpython-all-dev(如果您使用Python3,则安装libpypython3-all-dev)包。

特别是对于Python 3.7和Ubuntu,我需要

sudo apt安装libpython3.7-dev

.我想在某些时候,名字从pythom.n-dev改成了这个。

对于Python 3.6、3.8到3.10(以及计数…),类似地:

sudo apt安装libpython3.6-dev 

sudo apt安装libpython3.8-dev 

sudo apt安装libpython3.9-dev

sudo apt安装libpython3.10-dev

对于OpenSuse的同志们:

sudo zypper install python3-devel

这意味着Python.h不在编译器的默认包含路径中。您是在系统范围内安装还是在本地安装?你的操作系统是什么?

您可以使用-I<path>标志来指定编译器应该在其中查找标头的附加目录。您可能需要使用-L<path>进行后续操作,以便gcc可以使用-L<name>找到要链接的库。

如果您已经安装了Python,并且希望链接到特定的Python版本,则可以从Python获取相关的include路径。

>>> import sysconfig
>>> sysconfig.get_path('include')
'/usr/include/python3.10' # Example output

您可以使用shell脚本手动指定特定python版本的包含路径/构建:

#!/bin/sh
python_include=$(python3.10 -c "import sysconfig; print(sysconfig.get_path('include'))")
gcc -Wall utilsmodule.c -o Utilc -I"$python_include"