如何`pip install`一个具有非Python依赖的包?

9 浏览
0 Comments

如何`pip install`一个具有非Python依赖的包?

许多Python包在构建时依赖于非Python包。我特别想到的是lxml和cffi,但这个困境适用于PyPI上的许多包。这些包都依赖于像libxml2-dev、libxslt-dev、zlib1g-dev和libffi-dev这样的非Python包,但这些依赖关系并未在lxml和cffi的网站上明确声明,似乎无法从命令行中找到解决方法。

因此,Stack Overflow上有数百个类似以下形式的问题:

pip install foo失败并显示错误:"fatal error: bar.h: No such file or directory"。如何修复?

这是对pip的误用还是它的预期工作方式?有没有一种明智的方法来确定在运行pip之前要安装哪些构建依赖关系?我目前的做法是:

  1. 我想安装一个名为foo的包。
  2. pip install foo
  3. foo依赖于一个名为bar的Python包。

    • 如果bar构建失败,则查看错误消息并猜测/搜索需要安装的非Python依赖。
    • sudo apt-get install libbaz-dev
    • sudo pip install bar
    • 重复直到bar成功。
  4. sudo pip uninstall foo
  5. 重复整个过程直到没有错误消息。

第4步特别麻烦。显然,pip(版本1.5.4)先安装请求的包,然后再安装任何依赖项。因此,如果任何依赖关系失败,你不能只是要求pip再次安装它,因为它认为它已经安装了。也没有选项只安装依赖项,所以你必须先卸载包,然后重新安装。

有没有一种更智能的使用pip的方法?

0