我发现许多人在使用pip安装python包时遇到麻烦,因为没有安装python-dev。主要是错误:
fatal error: Python.h: No such file or directory
所以问题:python-dev应该是pip的必需依赖吗?或者这只是某个使用pip安装的软件包的问题,如果是这样,是否有一些步骤可以确保用户在安装模块时不会遇到错误?
答案 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,grpcio和python-qpid-proton来解决这些问题,我知道这是三个软件包。
zmq软件包显示通用的全部捕获错误消息。 grpcio软件包将打印一条特定的错误消息,该消息将对您有最大的帮助。 python-qpid-proton软件包仅显示编译器错误。
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
Python.h
https://gist.github.com/jiridanek/9bff05ae79b0eb5207821fc524acf12a
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`