如何“pip install”一个具有非python依赖关系的包?

2024-05-06 02:32:38 发布

您现在位置:Python中文网/ 问答频道 /正文

许多基于python的包都有非python包的依赖关系。我特别想到的是lxml和cffi,但这种困境适用于PyPI上的许多包。这两个包都对非Python包(如libxml2 dev、libxslt dev、zlib1g dev和libffi-dev)有未公开的构建依赖关系。lxml和cffi的网站声明了其中一些依赖项,但似乎无法通过命令行来解决这一问题。在

因此,有成百上千个问题都是这样的:

pip install foo fails with an error: "fatal error: bar.h: No such file or directory". How do I fix it?

这是对pip的误用,还是这是它的工作原理?在运行pip之前,有没有一种合理的方法来知道要安装哪些构建依赖项?我目前的做法是:

  1. 我想安装一个名为foo的包。在
  2. pip install foo
  3. foo依赖于Python包bar
    • 如果bar构建失败,那么查看错误消息并猜测/google我需要安装什么非Python依赖项。在
    • sudo apt-get install libbaz-dev
    • sudo pip install bar
    • 重复此操作,直到bar成功。在
  4. sudo pip uninstall foo
  5. 重复整个过程,直到没有错误消息。在

第4步特别烦人。显然pip(version 1.5.4)首先安装请求的包,在任何依赖项之前。因此,如果任何依赖项失败,您不能仅仅要求pip重新安装它,因为它认为它已经安装了。也没有只安装依赖项的选项,因此必须先卸载软件包,然后再重新安装。在

使用pip是否有更智能的过程?在


Tags: installpipdevpypi消息foo关系过程
2条回答

这实际上是关于建议使用apt-get的答案的注释,但我没有足够的信誉点数来留下一个。在

如果您经常使用virtualenv,那么通过apt-get安装python包会很麻烦,因为当安装在系统范围内的python包和安装在virtualenv中的python包试图相互交互时,您可能会遇到神秘的错误。我发现有一件事确实有帮助,那就是使用build-dep特性。要构建matplotlib依赖项,例如:

sudo apt-get build-dep python-matplotlib

然后激活虚拟环境并执行pip install matplotlib。它仍将经历构建过程,但许多依赖关系将为您处理。在

这是cran repositories在ubuntu中安装R包时的建议。在

对于大多数流行的软件包,有一个针对最近的ubuntu系统的解决方案。例如,我想安装matplotlib。当您订购pip install matplotlib时,它通常会因为缺少依赖项而失败。在

您可以改为使用apt-get install python-matplotlib。对于python3,可以使用apt-get install python3-matplotlib

相关问题 更多 >