首页 文章

致命错误:Python.h:没有这样的文件或目录

提问于
浏览
802

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

gcc -Wall utilsmodule.c -o Utilc

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

utilsmodule.c:1:20:致命错误:Python.h:没有此类文件或目录编译终止 .

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

25 回答

  • 14

    运行python34的AWS EC2安装:

    sudo yum install python34-devel

  • 27

    在我的例子中,在Ubuntu中修复它的是安装包 libpython-all-dev (如果使用Python 3则为 libpython3-all-dev ) .

  • 55

    尝试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#
    

    现在,您可以专门猜测哪一个可供选择 .

  • 1

    这不是相同的情况,但它也适用于我,现在我可以使用 SWIGPython3.5

    我试图编译:

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

    With Python 2.7 works fine, not with my version 3.5:

    existe_wrap.c:147:21:致命错误:Python.h:没有existe el archivo o el directorio编译终止 .

    After run in my Ubuntu 16.04 installation:

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

    Now I can compile without problems Python3.5:

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

    对于那里的OpenSuse同志:

    sudo zypper install python3-devel
    
  • 18

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

  • 11

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

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

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

    对于 aptUbuntu, Debian... ):

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

    对于 yumCentOS, RHEL... ):

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

    对于 dnfFedora... ):

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

    对于 zypperopenSUSE... ):

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

    对于 apkAlpine... ):

    # 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-cygCygwin... ):

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

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

    sudo apt-get install python3-dev
    

    如果要使用未链接到python3的Python版本,请安装相关的python3.x-dev软件包 . 例如:

    sudo apt-get install python3.5-dev
    
  • 8

    你要做的两件事 .

    安装Python的开发包,如果是Debian / Ubuntu / Mint,则使用命令完成:

    sudo apt-get install python-dev
    

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

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

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

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

    如果您使用的是Raspberry Pi:

    sudo apt-get install python-dev
    
  • 9

    在Fedora上为Python 2运行这个:

    sudo dnf install python2-devel
    

    对于Python 3:

    sudo dnf install python3-devel
    
  • 7

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

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

    我想补充一下Cygwin的解决方案:

    您需要 install the package python2-devel or python3-devel ,具体取决于您使用的Python版本 .

    您可以使用32-bit64-bit setup.exe (取决于您的安装)从Cygwin.com快速安装它 .

    示例(如果需要,修改 setup.exe 's filename and Python' s主要版本):

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

    您还可以查看我的other answer以获取更多选项,以便从命令行安装Cygwin的软件包 .

  • 44

    在AWS API(centOS)中

    yum install python27-devel
    
  • 240

    对我来说,改变它是有效的:

    #include <python2.7/Python.h>
    

    我找到了文件 /usr/include/python2.7/Python.h ,并且由于 /usr/include 已经在包含路径中,那么 python2.7/Python.h 就足够了 .

    您也可以从命令行添加包含路径 - gcc -I/usr/lib/python2.7 (感谢@ erm3nda) .

  • 1

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

    您不应该对库进行硬编码并包含路径 . 相反,使用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
    
  • 32

    对于CentOS 7:

    sudo yum install python36u-devel
    

    我按照这里的说明在几个VM上安装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

  • 13

    我在ubuntu中安装coolprop时也遇到了这个错误 .

    对于带有python 3.6的ubuntu 16.04

    sudo apt-get install python3.6-dev
    

    如果这不起作用,请尝试安装/更新 gcc lib .

    sudo apt-get install gcc
    
  • 1

    当我尝试使用Python3.6在CentOS 7上安装ctds时发生此错误 . 我做了这里提到的所有技巧,包括 yum install python34-devel . 问题是 Python.h/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和lib来纠正 .

    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需要包含在你的include中gcc的路径 . 无论使用哪种版本的python,例如如果它是3.6,那么它通常应该在 /usr/include/python3.6m/Python.h 中 .

  • 4

    当然 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 看到错误,这应该会有所帮助 .

  • 2

    当您尝试删除 python3.5 并安装 python3.6 时,通常会出现此问题 .

    所以当使用 python3 (其中 python3 -V => python3.6 )安装一些所需的包 python3.5 时会出现此错误 .

    通过安装 python3.6-dev 模块解决 .

  • 21

    这意味着 Python.h isn 't in your compiler' s默认包含路径 . 您是在系统范围内还是在本地安装它?你的操作系统是什么?

    您可以使用 -I<path> 标志指定编译器应查找标头的其他目录 . 您可能需要跟进 -L<path> ,以便gcc可以使用 -l<name> 找到您要链接的库 .

  • 13

    如果您在Amazon Linux上使用Python 3.6(基于RHEL,但此处给出的RHEL答案不起作用):

    sudo yum install python36-devel
    
  • 12

    有时甚至在安装python-dev之后错误仍然存在,如果缺少“gcc”,请检查错误 .

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

    For apt (Ubuntu, Debian...):

    sudo apt-get install gcc
    

    For yum (CentOS, RHEL...):

    sudo yum install gcc
    

    For dnf (Fedora...):

    sudo dnf install gcc
    

    For zypper (openSUSE...):

    sudo zypper in gcc
    

    For apk (Alpine...):

    sudo apk gcc
    

相关问题