我试图使用C扩展名文件构建共享库,但首先必须使用以下命令生成输出文件:
gcc -Wall utilsmodule.c -o Utilc
执行命令后,我收到以下错误消息:
> utilsmodule.c:1:20: fatal error: Python.h: No such file or directory
compilation terminated.
我已经在互联网上尝试了所有建议的解决方案,但问题仍然存在。我对Python.h没有问题。我设法在我的机器上找到了该文件。
我试图使用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
其他回答
确保Python开发文件随操作系统一起提供。
您不应该硬编码库和包含路径。相反,使用pkg配置,它将为您的特定系统输出正确的选项:
$ pkg-config --cflags --libs python2
-I/usr/include/python2.7 -lpython2.7
您可以将其添加到gcc行:
gcc -Wall utilsmodule.c -o Utilc $(pkg-config --cflags --libs python2)
AWS EC2安装运行python34:
sudo yum安装python34-devel
对于OpenSuse的同志们:
sudo zypper install python3-devel
经确认,如果您正在运行centos 8+。您需要运行以下操作:
sudo yum -y install python36 python38 python39
sudo yum -y install python36-devel.x86_64 python38-devel.x86_64 python39-devel.x86_64
pip3.8 install cpython
pip3.9 install cpython
pip3.6 install cpython
如果操作系统附带的Python未随附,则必须在操作系统上安装Python开发文件。关于这个问题的许多答案显示了在不同系统上实现这一点的多种方式。当您这样做时,问题是告诉编译器它们的位置以及如何针对它们进行编译。Python附带了一个名为Python-config的程序。对于编译,您需要--includes输出,而对于将程序与Python库链接(将Python嵌入到程序中),则需要--ldflags输出。例子:gcc-c mypythonprogram.c$(python3配置--包含)gcc-o程序mypythonprogram.o$(python3配置--ldflags)
python-config程序可以以python版本命名,例如在Debian、Ubuntu上,可以将其命名为python3-config或python3.6-config。