我试图使用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没有问题。我设法在我的机器上找到了该文件。
当前回答
如果您使用带有3.6 python的virtualenv(现在是边缘),请确保安装匹配的python 3.6 dev sudo apt-get install python3.6-dev,否则执行sudo python3 dev将安装python dev 3.3.3-1,这不会解决问题。
其他回答
当我尝试在CentOS 7上使用Python3.6安装ctds时发生此错误。我完成了这里提到的所有技巧,包括yum安装python34-devel。问题是Python.h在/usr/include/python3.4m中找到,但在/usr/include/python3.6m中找不到。我尝试使用--global选项指向include-dir(pip3.6 install--global option=build_ext--global options=“--include-dirs=/usr/include/pyton3.4m”ctds)。这导致在链接ctd时找不到lpython3.6m。
最后,工作是修复Python3.6的开发环境,需要使用include和libs进行纠正。
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.h不在编译器的默认包含路径中。您是在系统范围内安装还是在本地安装?你的操作系统是什么?
您可以使用-I<path>标志来指定编译器应该在其中查找标头的附加目录。您可能需要使用-L<path>进行后续操作,以便gcc可以使用-L<name>找到要链接的库。
有时,即使在安装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
在Fedora上运行Python 2:
sudo dnf install python2-devel
对于Python 3:
sudo dnf install python3-devel
当您安装了不同的Python版本,并且使用的不是系统的pip时,也会出现此问题。在这种情况下,非系统pip无法找到正确版本的Python头。
我在尝试pip安装与应用程序捆绑的Python包时遇到了这种情况。由于不是系统的python,apt-installpythonXX-dev无法工作。
在这种情况下,解决方案是找到正确的python头:
find / -iname 'Python.h'
在输出中,您将看到系统python头文件,希望是您要查找的头文件,例如:
/usr/include/python3.7m/Python.h
/usr/include/python3.6m/Python.h
/home/ubuntu/workspace/blender-git/lib/linux_centos7_x86_64/python/include/python3.7m/Python.h
/home/ubuntu/miniconda3/pkgs/python-3.8.5-h7579374_1/include/python3.8/Python.h
/home/ubuntu/miniconda3/pkgs/python-3.7.0-h6e4f718_3/include/python3.7m/Python.h
/home/ubuntu/miniconda3/include/python3.8/Python.h
/home/ubuntu/miniconda3/envs/sim/include/python3.7m/Python.h
/home/ubuntu/src/blender-deps/Python-3.7.7/Include/Python.h
/opt/lib/python-3.7.7/include/python3.7m/Python.h
然后,您可以设置一个编译器标志,当被pip调用时,它将被gcc使用。我的是/home/ubuntu/workspace/binder git/lib/linux_centos7_x86_64/python/include/python3.7m/python.h,所以我这样做了:
export CPPFLAGS=-I/home/ubuntu/src/blender-deps/Python-3.7.7/Include
pip install <package>