python编译的文件溢出,致命错误:Python.h:没有这样的文件或目录

看起来你没有正确安装Python开发的头文件和静态库。 使用你的软件包pipe理器在系统范围内安装它们。

对于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

对于dnf ( Fedora … ):

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

在Ubuntu上,我正在运行Python 3,我不得不安装

sudo apt-get install python3-dev

你必须做两件事。

安装Python开发包,以Debian / Ubuntu / Mint为例:

sudo apt-get install python-dev

第二件事是包含文件在包含path中不是默认的,Python库也默认与可执行文件链接。 你需要添加这些标志(相应地replacePython的版本):

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

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

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

如果你正在使用树莓派:

sudo apt-get install python-dev

在Fedora上运行Python 2:

sudo dnf install python2-devel

和Python 3:

sudo dnf install python3-devel

如果您正在使用tox在多个版本的Python上运行testing,则可能需要为要testing的每个Python版本安装Python开发库。

sudo apt-get install python2.6-dev sudo apt-get install python2.7-dev etc.

在AWS API(centOS)中

yum install python27-devel

我还想为Cygwin添加解决scheme:

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

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

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

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

您还可以查看我的其他答案 ,以从命令行安装Cygwin的软件包。

对我来说,改变它到这个工作:

#include

我find了/usr/include/python2.7/Python.h这个文件,因为/usr/include已经在包含path中,那么python2.7/Python.h就足够了。

你也可以从命令行添加包含path – gcc -I/usr/lib/python2.7 (谢谢@ erm3nda)。

确保Python开发文件随操作系统一起提供。

你不应该硬编码库和包括path。 相反,请使用pkg-config,它将为您的特定系统输出正确的选项:

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

您可以将其添加到您的gcc行:

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

在我的情况下,在Ubuntu中修复的是安装libpython-all-dev软件包(如果使用Python 3,则安装libpython-all-dev )。

AWS EC2安装运行python34:

sudo yum install python34-devel

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

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

如果你使用一个3.6 python的virtualenv(现在边缘),一定要安装匹配的python 3.6 dev sudo apt-get install python3.6-dev ,否则执行sudo python3-dev会安装python dev 3.3.3- 1,这不会解决问题。

对于OpenSuse同志们来说:

sudo zypper install python3-devel

这是不一样的情况,但它也适用于我,现在我可以用Python3.5使用SWIG :

我正在编译:

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

与Python 2.7工作正常,而不是我的版本3.5:

existe_wrap.c:147:21:致命错误:Python.h:没有存档或存档。

在我的Ubuntu 16.04安装运行后:

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

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

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

尝试apt-file。 记住丢失的文件所在的包名是很困难的。 它对任何包文件都是通用的和有用的。

例如:

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#

现在你可以让专家猜测哪一个可以select。

这意味着Python.h不在您的编译器的默认包含path中。 你是在系统范围还是在本地安装的? 你的操作系统是什么?

您可以使用-I标志来指定编译器应该查找标题的附加目录。 您可能需要跟进-L以便gcc可以使用-lfind要链接的库。

当然, python-dev或者libpython-all-dev是install的第一件事,但是如果这样做对我来说没有帮助的话,我build议你通过sudo apt-get install libffi-dev安装外部函数接口包sudo apt-get install libffi-dev和pip install cffi 。

这应该有所帮助,特别是如果你看到错误/从c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory 。

当我尝试在Python3.6的CentOS 7上安装ctds时,发生了这个错误。 我做了这里提到的所有技巧,包括yum install python34-devel 。 问题是Python.h在/usr/include/python3.4m but not in /usr/include/python3.6m中find, /usr/include/python3.4m but not in /usr/include/python3.6m找不到。 我尝试使用--global-option指向包含目录( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds ) 。 这导致连接ctds时找不到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的path中。 无论使用哪种版本的Python,例如,如果它是3.6,那么通常应该在/usr/include/python3.6m/Python.h 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值