许多python包都在非Python包上构建依赖关系。我特别想到了lxml和cffi,但这种困境适用于PyPI上的很多软件包。这两个软件包都对非Python软件包(如libxml2-dev,libxslt-dev,zlib1g-dev和libffi-dev)具有未公开的构建依赖性。 lxml和cffi的网站声明了一些这些依赖项,但似乎无法从命令行中解决这个问题。
因此,有数百个关于SO的问题采用这种一般形式:
pip install foo
失败并显示错误:"致命错误:bar.h:没有此类文件或目录"。我该如何解决?
这是对pip
的误用还是它是如何工作的?在运行pip
之前,是否有一种明智的方式来了解要安装的构建依赖项?我目前的做法是:
foo
的包。pip install foo
foo
依赖于Python包bar
。
bar
版本失败,请查看错误消息并猜测/ google我需要安装的非Python依赖项。sudo apt-get install libbaz-dev
sudo pip install bar
bar
成功。sudo pip uninstall foo
步骤#4特别烦人。显然pip
(版本1.5.4)首先安装所请求的包,然后在任何依赖之前安装。因此,如果任何依赖项失败,您只能让pip
再次安装它,因为它认为它已经安装。还没有选择只安装依赖项,因此您必须卸载该软件包然后重新安装它。
使用pip
是否有更智能的流程?
答案 0 :(得分:14)
这实际上是关于建议使用apt-get
的答案的评论,但我没有足够的声誉点来留下一个。
如果你经常使用virtualenv,那么通过apt-get
安装python-packages会变得很麻烦,因为当系统安装了python包并安装了python包时,你可能会遇到神秘的错误在你的virtualenv尝试互相交流。我发现的一件事情确实有用,就是使用build-dep
功能。要构建matplotlib依赖项,例如:
sudo apt-get build-dep python-matplotlib
然后激活您的虚拟环境并执行pip install matplotlib
。它仍然会经历构建过程,但许多依赖项将由你来处理。
这是cran repositories在ubuntu中安装R软件包时的建议。
答案 1 :(得分:1)
对于大多数流行的软件包,最近的ubuntu系统有一个解决方法。例如,我想安装matplotlib
。当您订购pip install matplotlib
时,它通常会因缺少依赖性而失败。
您可以改用apt-get install python-matplotlib
。对于python3,您可以使用apt-get install python3-matplotlib