我试图使用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 

其他回答

Cygwin解决方案

您需要安装python2-devel或python3-devel包,具体取决于您使用的Python版本。

您可以使用Cygwin.com上的32位或64位setup.exe(取决于您的安装)快速安装它。

示例(如果需要,请修改setup.exe的文件名和Python的主要版本):

$ setup.exe -q --packages=python3-devel

您还可以查看我的另一个答案,以获得从命令行安装Cygwin软件包的更多选项。

看起来您没有正确安装python dev的头文件和静态库。请使用包管理器在系统范围内安装它们。

对于apt(Ubuntu、Debian…):

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

对于yum(CentOS,RHEL…):

sudo yum install python-devel    # for python2.x installs
sudo yum install python3-devel   # for python3.x installs

对于dnf(Fedora…):

sudo dnf install python2-devel  # for python2.x installs
sudo dnf install python3-devel  # for python3.x installs

对于zypper(openSUSE…):

sudo zypper in python-devel   # for python2.x installs
sudo zypper in python3-devel  # for python3.x installs

对于apk(Alpine…):

# This is a departure from the normal Alpine naming
# scheme, which uses py2- and py3- prefixes
sudo apk add python2-dev  # for python2.x installs
sudo apk add python3-dev  # for python3.x installs

对于apt-cyg(Cygwin…):

apt-cyg install python-devel   # for python2.x installs
apt-cyg install python3-devel  # for python3.x installs

注意:python3dev不会自动覆盖python3的所有次要版本,如果您正在使用例如python3.8,则可能需要安装python3.8-dev。

有时,即使在安装python dev之后,错误仍然存在,如果缺少“gcc”,请检查错误。

第一次下载,如中所述https://stackoverflow.com/a/21530768/8687063,然后安装gcc

对于apt(Ubuntu、Debian…):

sudo apt-get install gcc

对于yum(CentOS,RHEL…):

sudo yum install gcc

对于dnf(Fedora…):

sudo dnf install gcc

对于zypper(openSUSE…):

sudo zypper in gcc

对于apk(Alpine…):

sudo apk gcc

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

如果操作系统附带的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。