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

gcc -Wall utilsmodule.c -o Utilc

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

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

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


当前回答

你必须做两件事。

安装Python开发包,如果是Debian/Uubuntu/Mint,可以使用以下命令完成:

sudo apt-get install python-dev

第二点是,默认情况下,include文件不在include路径中,Python库默认情况下也不与可执行文件链接。您需要添加这些标志(相应地替换Python的版本):

-I/usr/include/python2.7 -lpython2.7 

换句话说,编译命令应该是:

gcc -Wall -I/usr/include/python2.7 -lpython2.7  utilsmodule.c -o Utilc 

其他回答

如果您使用带有3.6 python的virtualenv(现在是边缘),请确保安装匹配的python 3.6 dev sudo apt-get install python3.6-dev,否则执行sudo python3 dev将安装python dev 3.3.3-1,这不会解决问题。

这不是同一种情况,但它也适用于我,现在我可以在Python3.5中使用SWIG:

我试图编译:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/

使用Python 2.7可以很好地工作,而不是使用我的3.5版本:

exist_wrap.c:147:21:致命错误:Python.h:不存在el archivo o eldirectorio编译已终止。

在Ubuntu 16.04安装中运行后:

sudo apt-get install python3-dev  # for python3.x installs

现在我可以毫无问题地编译Python3.5:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/

如果您在Amazon Linux上使用Python 3.6(基于RHEL,但此处给出的RHEL答案无效):

sudo yum install python36-devel

我设法解决了这个问题,并在一个命令中生成.so文件

gcc -shared -o UtilcS.so
-fPIC -I/usr/include/python2.7 -lpython2.7  utilsmodule.c

在AWS API(centOS)中

yum install python27-devel