应该是python-dev来安装pip

时间:2014-01-24 19:59:19

标签: python pip fatal-error

我发现许多人在使用pip安装python包时遇到麻烦,因为没有安装python-dev。主要是错误:

fatal error: Python.h: No such file or directory

所以问题:python-dev应该是pip的必需依赖吗?或者这只是某个使用pip安装的软件包的问题,​​如果是这样,是否有一些步骤可以确保用户在安装模块时不会遇到错误?

2 个答案:

答案 0 :(得分:17)

我不认为这实际上属于StackOverflow,但万一我错了......

首先,python-dev不是Python的东西,它是Ubuntu或Fedora或其他一些发行版的东西。如果您下载,构建和安装Python,或从python.org运行任何二进制安装程序,则会在适当的位置安装Python.h。许多Linux发行版都喜欢将软件包拆分成子包,移动你只需要构建成-dev或类似软件包的东西,这对Python来说完全没有错,但它仍然是发行版正在做的事情。

其次,构建所有软件包不需要Python.h,只需要包含C扩展模块的软件包。由于许多软件包都是纯Python并且没有这样的扩展模块,因此发行版的pip软件包不需要其python-dev软件包是有意义的。 (就像发行版的pip包可能不需要C编译器一样。)

第三,大多数给你一个python-pip或类似包的发行版也会为你提供流行包的包。如果你以这种方式安装它们,要么你不需要python-dev(和C编译器),因为它们是二进制包,或者你需要它们但是它们将作为依赖项被拉入(rpm, deb等都可以指定单独的“构建”和“运行”依赖项。)

但是如果你回到你的包管理器后面并尝试用pip安装包(这是一件合理的事情),包管理器不能告诉你哪些包需要什么依赖,而{{ 1}}只能告诉你Python包的依赖关系,所以没有什么可以强制执行的。

答案 1 :(得分:0)

我检查了流行的PyPi软件包如何处理丢失的timestamp, transaction_id, buyer_id, status 01/01/2020 00:00:00, 1, abc123, 1 01/01/2020 00:25:00, 2, abc123, 1 01/01/2020 00:30:00, 3, abc123, 1 01/01/2020 00:45:00, 4, def456, 1 02/01/2020 08:55:00, 5, abc123, 1 02/01/2020 10:55:00, 6, def456, 1 03/01/2020 12:55:00, 7, def456, 1 。我的第一个问题是找到构建C扩展的流行PyPi软件包,我通过检查zmq / pyzmq,grpciopython-qpid-proton来解决这些问题,我知道这是三个软件包。

zmq软件包显示通用的全部捕获错误消息。 grpcio软件包将打印一条特定的错误消息,该消息将对您有最大的帮助。 python-qpid-proton软件包仅显示编译器错误。

ZMQ

timestamp, transaction_id, buyer_id, status, q_app_1d
01/01/2020 00:00:00, 1, abc123, 1, 0
01/01/2020 00:25:00, 2, abc123, 1, 1 #(considers transaction_id 1)
01/01/2020 00:30:00, 3, abc123, 1, 2 #(considers transaction_id 1,2)
01/01/2020 00:45:00, 4, def456, 1, 0
02/01/2020 08:55:00, 5, abc123, 1, 0 #(more than one day since transaction_id 3)
02/01/2020 10:55:00, 6, def456, 1, 0 #(more than one day since transaction_id 4)
03/01/2020 08:55:00, 7, def456, 1, 1 #(considers transaction_id 6)

https://gist.github.com/jiridanek/0fcd09f27d379ae984b84f174986093d

gRPC.io

Python.h

https://gist.github.com/jiridanek/9bff05ae79b0eb5207821fc524acf12a

Python Qpid质子

    build/temp.linux-x86_64-3.7/scratch/vers.c:4:10: fatal error: zmq.h: No such file or directory                                                                                                                                           
        4 | #include "zmq.h"                                                                                                                                                                                                                 
          |          ^~~~~~~                                                                                                                                                                                                                 
    compilation terminated.                                                                                                                                                                                                                  

    error: command 'gcc' failed with exit status 1                                                                                                                                                                                           

    ************************************************                                                                                                                                                                                         
    Warning: Couldn't find an acceptable libzmq on the system.                                                                                                                                                                               

    If you expected pyzmq to link against an installed libzmq, please check to make sure:                                                                                                                                                    

        * You have a C compiler installed                                                                                                                                                                                                    
        * A development version of Python is installed (including headers)
        * A development version of ZMQ >= 3.2 is installed (including headers)
        * If ZMQ is not in a default location, supply the argument --zmq=<path>
        * If you did recently install ZMQ to a default location,
          try rebuilding the ld cache with `sudo ldconfig`
          or specify zmq's location with `--zmq=/usr/local`