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 dev的头文件和静态库。请使用包管理器在系统范围内安装它们。
对于
1 2 | sudo apt-get install python-dev # for python2.x installs sudo apt-get install python3-dev # for python3.x installs |
对于
1 2 | sudo yum install python-devel # for python2.x installs sudo yum install python34-devel # for python3.4 installs |
对于
1 2 | sudo dnf install python2-devel # for python2.x installs sudo dnf install python3-devel # for python3.x installs |
对于
1 2 | sudo zypper in python-devel # for python2.x installs sudo zypper in python3-devel # for python3.x installs |
对于
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 |
对于
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解决方案
您需要安装包
您可以使用cygwin.com上的32位或64位
示例(如果需要,请修改
1 | $ setup.exe -q --packages=python3-devel |
您还可以查看我的其他答案,了解从命令行安装cygwin包的更多选项。
在AWS API(CentOS)ITS中
1 | yum install python27-devel |
对我来说,把它改成这个很有效:
1 | #include <python2.7/Python.h> |
我找到了文件
您还可以从命令行添加include路径-
安装运行中的Python34:
确保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中修复它的方法是安装包
情况不一样,但也适用于我,现在我可以在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
我设法解决了这个问题,并在一个命令中生成了.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 |
如果不起作用,请尝试安装/更新
1 | sudo apt-get install gcc |
当然,
如果您将错误视为/来自
当我尝试使用python3.6在CentOS 7上安装CTD时发生此错误。我做了这里提到的所有技巧,包括
最后,需要用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,那么它通常应该在
有时,即使安装了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 |
当您试图删除
因此,当使用
安装
这意味着
您可以使用