【问题标题】:I have Python on my Ubuntu system, but gcc can't find Python.h我的 Ubuntu 系统上有 Python,但 gcc 找不到 Python.h
【发布时间】:2012-01-07 02:36:26
【问题描述】:

我在学校的计算机上,所以我无法安装任何东西。

我正在尝试创建可以在 Python 中运行的 C 代码。看来我在上面找到的所有文章都需要您使用

#include <Python.h>

我这样做了,但是当我编译时它抱怨 没有这样的文件或目录。

计算机有 Python(至少它在终端中有python 命令,我们可以运行任何我们想要的 Python 代码)。

我在终端输入了locate Python.h,但什么也没找到。

我有两个问题:

  1. 我可以编写可以在没有Python.h 的情况下在 Python 中调用的 C 代码吗?

  2. 我是不是遗漏了什么,电脑上居然有Python.h

【问题讨论】:

  • 打电话给某人,让他们下载并通过电子邮件发送给您。然后把它放在机器上任何你想要的地方。
  • @HunterMcMillen:这解决不了多少问题,因为 Python.h 包含许多其他文件。此外,您需要与系统的 Python 版本匹配的确切 Python.h。
  • 虽然这个问题比那个问题更老,但是那个问题得到了更好的答案。 fatal error: Python.h: No such file or directory

标签: python c ubuntu header


【解决方案1】:

您需要包含Python.hpython-dev

【讨论】:

  • 我已经在 ubuntu 12.04 中安装了 python-dev 并获得了 /usr/include/python2.7 区域,但其中不存在 python.h 文件。有什么想法吗?
  • 某些情况下包名为python-devel x)
  • 查看 danielcooperxyz 的回答:gcc $(python-config --includes)
  • 当前 Ubuntu 发行版中的 python3-dev(假设 Python 3)
  • python3.7-dev,适用于 Python 3.7。
【解决方案2】:

在 Ubuntu 上,您需要安装一个名为 python-dev 的软件包。由于这个包似乎没有安装(locate Python.h 没有找到任何东西)而且你不能自己在系统范围内安装它,我们需要一个不同的解决方案。

您可以将 Python 安装在您的主目录中——您不需要任何特殊权限即可执行此操作。如果您被允许使用网络浏览器并运行 gcc,这应该对您有用。为此

  1. 下载the source tarball

  2. 解压

    tar xjf Python-2.7.2.tar.bz2
    
  3. 使用构建和安装

    cd Python-2.7.2
    ./configure --prefix=/home/username/python --enable-unicode=ucs4
    make
    make install
    

现在,您已经在主目录中安装了完整的 Python。编译时将-I /home/username/python/include 传递给gcc 以使其知道Python.h。链接时传递-L /home/username/python/lib-lpython2.7

【讨论】:

  • 嗯,它主要工作。我现在收到此错误:/home/pdem/python/Include/Python.h:8:22: error: pyconfig.h: No such file or directory....顺便说一句,计算机正在运行 python 版本 2.6.5。 ..这有什么区别吗?谢谢!
  • @user979344:我不知道错误消息的原因。你路径中的大写 I 让我有点吃惊——你应该使用安装 Python 的地方的Python.h,而不是解压 tarball 的地方。已经安装的 Python 版本无关紧要——您正在安装自己的 Python,任何您想要的版本。它可以与系统范围的安装共存。
  • python/Lib 包含标准库的 Python 模块。我想你的意思是 -L...python/Python/,其中包含一些 .c 和 .o 文件。
  • @JonathanHartley:不,我的意思正是我写的。您将源代码分发中的路径 Lib/ 与已安装软件的路径 $prefix/lib 混淆了。
  • @SvenMarnach 啊哈!我知道了。谢谢。
【解决方案3】:

你必须使用 #include "python2.7/Python.h" 而不是 #include "Python.h"

【讨论】:

  • 一旦您知道库的存储位置和方式更有意义,就不要介意获取没有指定路径的机器生成文件:D
  • 你救了我的命。我已经安装了 python-dev ,但在看到你的答案之前仍然无法让它工作。为您的答案投票,让更多人看到。
  • 如果您是包括 Python.h 在内的 C/C++ 代码的所有者,这可能是一个合理的解决方案,如果您不是,您最好编辑构建脚本而不是更改您的包含目录;我认为我尝试使用的特定库从未想过 Python 3 会成为一件事。另一件值得一提的事情,我想说,在任何情况下,您都不应该对 Python2 标头进行符号链接或做任何其他事情来假装两个 Python 版本相同……在 Linux 系统上,这可能是致命的,因为不幸的是 Linux 需要两个 Python 2和 3 个独立。
  • 修复 pip not found Python.h 的“正确”方法是什么?我在Ubuntu18上安装了py3.7,libpython3.7-dev没有添加任何头文件,但是它们存在于/usr/include/python3.6m中。在创建符号链接 python3.7m -> python3.6m 后,我可以使用 pip 安装库,但正如您所说,这是非常有问题的,应该这样做。那么应该怎么做呢?
【解决方案4】:

对于 Ubuntu 15.10 和 Python 3,由于它们没有 Python.h 但具有管理权限,因此提出了这个问题,以下可能会解决它:

sudo apt-get install python-dev
sudo apt-get install python3-dev
sudo apt-get install libpython3-dev
sudo apt-get install libpython3.4-dev
sudo apt-get install libpython3.5-dev

【讨论】:

  • 它也适用于 ubuntu 16.04 :) 谢谢你,Martin!
  • sudo apt-get install libpython3.6-dev 为我解决了这个问题。谢谢!
  • sudo apt-get install libpython3.7-dev 为 Ubuntu 18.04 和 Python 3.7 解决了这个问题
  • 我都试过了,在 Mint 20 上安装了 python3.8.5,也试过了,没用...
【解决方案5】:

在 ubuntu 上,你可以在终端输入 sudo apt-get install python-dev -y 来安装 python-dev 包。

【讨论】:

  • OP 说他们在学校的计算机上,所以他们可能无法使用sudo apt-get
【解决方案6】:

我在 ubuntuforums (ubuntuforums) 中找到了答案,您可以将其添加到您的 gcc '$(python-config --includes)' 中

gcc $(python-config --includes) urfile.c

【讨论】:

  • 对于python3,它将是python3-config
【解决方案7】:

头文件现在由libpython2.7-dev提供。

您可以使用search form at packages.ubuntu.com 了解Python.h 提供的软件包。

【讨论】:

  • 这在 AWS 上新推出的 Ubuntu 实例上为我解决了这个问题。 sudo apt-get install libpython2.7-dev
【解决方案8】:

您需要安装 python-dev。
对于 Ubuntu:
sudo apt-get install python-dev # for python2.x installs sudo apt-get install python3-dev # for python3.x installs
如需更多发行版,请参阅 -
https://stackoverflow.com/a/21530768/6841045

【讨论】:

    【解决方案9】:

    我在 CentOS 7 机器上尝试构建一个非常古老的omniORB 副本时遇到了同样的问题。通过安装python开发库解决了这个问题:

    # yum install python-devel
    

    这将 Python.h 安装到:

    /usr/include/python2.7/Python.h

    【讨论】:

      【解决方案10】:

      这是因为 Python.h 不在默认包含文件夹(即 /usr/include/ )中。

      安装 Python-dev 可能会有所帮助:

      $ sudo apt-get install python-dev 
      

      但大多数情况下问题仍然存在,因为开发包是在包含文件夹本身(/usr/include/python2.7python3)内的单独文件夹中制作的。

      因此,您应该使用gcc 中的-I 选项指定库文件夹,或者通过创建指向这些文件夹内所有内容的软链接到外面(我更喜欢前一个选项)。

      gcc 中使用-I 选项:

      $ gcc -o hello -I /usr/include/python2.7 helloworld.c
      

      创建软链接:

      $ sudo ln -sv /usr/include/python2.7/* /usr/include/
      

      【讨论】:

      • 该死的东西,创建符号链接有效。我已经尝试了所有其他推荐的方法,但没有取得多大成功。
      【解决方案11】:
      locate Python.h
      

      如果输出为空,则查找你的python版本

      python --version
      

      假设它是 X.x,即 2.7 或 3.6、3.7、3.8 然后用相同的版本安装python的头文件和静态库

      sudo apt-get install pythonX.x-dev
      
      

      【讨论】:

        【解决方案12】:

        转到 Synaptic 软件包管理器。重新加载 -> 搜索 python -> 选择你想要的 python 包 -> 提交 -> 安装 为我工作;)

        没错,你需要安装的包是python-dev。

        【讨论】:

        • 提问者表示无法在系统上安装新软件包。
        【解决方案13】:

        这意味着你没有为 python dev 安装库。

        如果您使用的是 Linux 操作系统,则可以通过以下命令单独解决此问题:

        • Ubuntu(Debian):

          sudo apt-get install python-dev (Py2) 或 sudo apt-get install python3-dev (Py3)

        • Rehat (CentOS):

          yum install python-devel

        【讨论】:

          【解决方案14】:

          没有一个答案对我有用。如果你在 Ubuntu 上运行,你可以试试:

          使用python3:

          sudo apt-get install python3 python-dev python3-dev \
               build-essential libssl-dev libffi-dev \
               libxml2-dev libxslt1-dev zlib1g-dev \
               python-pip
          

          使用 Python 2:

          sudo apt-get install python-dev  \
               build-essential libssl-dev libffi-dev \
               libxml2-dev libxslt1-dev zlib1g-dev \
               python-pip
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-11-29
            • 1970-01-01
            • 2014-03-17
            • 1970-01-01
            • 2016-09-17
            • 2020-09-05
            • 1970-01-01
            相关资源
            最近更新 更多