关于gcc:致命错误:python.h:没有这样的文件或目录 No such file or directory

fatal error: Python.h: No such file or directory

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

1
gcc -Wall utilsmodule.c -o Utilc

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

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

事实上,我已经通过互联网尝试了所有建议的解决方案,但问题仍然存在…另外,我对Python.h也没有问题。我设法在我的机器上找到了文件…有人以前也遇到过同样的问题吗??


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

对于apt(ubuntu,debian…):

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

对于yum(Centos,Rhel…):

1
2
sudo yum install python-devel   # for python2.x installs
sudo yum install python34-devel   # for python3.4 installs

对于dnf(Fedora…):

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

对于zypper(opensuse…):

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

对于apk(阿尔卑斯山…):

1
2
3
4
# 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…):

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


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

1
sudo apt-get install python3-dev

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

1
sudo apt-get install python3.5-dev


你必须做两件事。

为python安装开发包,如果是debian/ubuntu/mint,则使用以下命令完成:

1
sudo apt-get install python-dev

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

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

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

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


如果使用覆盆子圆周率:

1
sudo apt-get install python-dev


在Fedora上运行这个for python 2:

1
sudo dnf install python2-devel

对于python 3:

1
sudo dnf install python3-devel


如果使用tox在多个版本的python上运行测试,则可能需要为测试的每个版本的python安装python dev库。

1
2
3
sudo apt-get install python2.6-dev
sudo apt-get install python2.7-dev
etc.

Cygwin解决方案

您需要安装包python2-develpython3-devel,这取决于您使用的Python版本。

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

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

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

您还可以查看我的其他答案,了解从命令行安装cygwin包的更多选项。


在AWS API(CentOS)ITS中

1
yum install python27-devel


对我来说,把它改成这个很有效:

1
#include <python2.7/Python.h>

我找到了文件/usr/include/python2.7/Python.h,由于/usr/include已经在include路径中,所以python2.7/Python.h就足够了。

您还可以从命令行添加include路径-gcc -I/usr/lib/python2.7(谢谢@erm3nda)。


安装运行中的Python34:

sudo yum install python34-devel


确保python dev文件随操作系统一起提供。

您不应该硬编码库并包含路径。相反,使用pkg config,它将为您的特定系统输出正确的选项:

1
2
$ pkg-config --cflags --libs python2
-I/usr/include/python2.7 -lpython2.7

您可以将其添加到GCC行:

1
gcc $(pkg-config --cflags --libs python2) -Wall utilsmodule.c -o Utilc

在我的例子中,在Ubuntu中修复它的方法是安装包libpython-all-dev,或者如果使用python 3,安装包libpython3-all-dev


情况不一样,但也适用于我,现在我可以在python3.5中使用swig:

我试图编译:

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

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

existe_wrap.c:147:21: fatal error: Python.h: No existe el archivo o el
directorio compilation terminated.

在我的Ubuntu 16.04安装中运行后:

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

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

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


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


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

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

尝试APT文件。很难记住丢失文件所在的包名。它是通用的,对任何包文件都有用。

例如:

1
2
3
4
5
6
7
root@ubuntu234:~/auto# apt-file search --regexp '/Python.h$'
pypy-dev: /usr/lib/pypy/include/Python.h
python2.7-dbg: /usr/include/python2.7_d/Python.h
python2.7-dev: /usr/include/python2.7/Python.h
python3.2-dbg: /usr/include/python3.2dmu/Python.h
python3.2-dev: /usr/include/python3.2mu/Python.h
root@ubuntu234:~/auto#

现在你可以做一个专家的猜测,从中选择哪一个。


对于CITOS 7:

1
sudo yum install python36u-devel

我按照这里的说明在几个虚拟机上安装python3.6:https://www.digitalOcean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming-environment-on-centos-7然后能够构建mod_wsgi并使其与python3.6 virtualenv一起工作


对于在座的各位同志们:

1
sudo zypper install python3-devel

我在Ubuntu安装Coolprop时也遇到了这个错误。

适用于带python 3.6的Ubuntu 16.04

1
sudo apt-get install python3.6-dev

如果不起作用,请尝试安装/更新gcclib。

1
sudo apt-get install gcc


当然,python-devlibpython-all-dev是(aptinstall的第一件事,但如果这对我没有帮助,我建议你安装sudo apt-get install libffi-devsudo pip install cffi的外部功能接口包。

如果您将错误视为/来自c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory,这将有助于解决问题。


当我尝试使用python3.6在CentOS 7上安装CTD时发生此错误。我做了这里提到的所有技巧,包括yum install python34-devel。问题是Python.h/usr/include/python3.4m but not in /usr/include/python3.6m中被发现。我试图用--global-option来指包括dir(pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds)。这导致在连接CTD时未发现lpython3.6m

最后,需要用include和libs修正python3.6的开发环境。

1
yum -y install https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/python36u-libs-3.6.3-1.ius.centos7.x86_64.rpm

python.h需要在gcc的include路径中。无论使用哪种版本的python,例如,如果它是3.6,那么它通常应该在/usr/include/python3.6m/Python.h中。


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

首先按照https://stackoverflow.com/a/21530768/8687063中的说明下载,然后安装gcc

对于apt(Ubuntu,Debian…):

1
sudo apt-get install gcc

对于yum(Centos,rhel…):

1
sudo yum install gcc

对于DNF(Fedora…):

1
sudo dnf install gcc

对于zypper(opensuse…):

1
sudo zypper in gcc

对于APK(阿尔卑斯山…):

1
sudo apk gcc

如果您在AmazonLinux上使用python 3.6(基于rhel,但是这里给出的rhel答案不起作用):

1
sudo yum install python36-devel

当您试图删除python3.5并安装python3.6时,通常会出现这种情况。

因此,当使用python3(其中python3 -V=>python3.6安装某些需要python3.5头的包时,会出现此错误。

安装python3.6-dev模块解决。


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

您可以使用-I标志指定一个额外的目录,编译器应该在其中查找头文件。您可能需要跟进-L,以便gcc可以找到您使用-l链接的库。