【问题标题】:Stop pip installing dependancies already installed using apt-get停止 pip 安装已使用 apt-get 安装的依赖项
【发布时间】:2016-01-23 19:57:07
【问题描述】:

如何确保使用 pip 安装的软件包不会安装已使用 apt-get 安装的依赖项?

例如,在 Ubuntu 上,您可以使用 apt-get install python-numpy 安装包 Numpy。安装到:

usr/local/lib/python2.7/dist-packages 

我注意到,当我使用 pip 安装需要 numpy 的软件包时,例如,pip install scipy 而不是跳过 numpy 依赖项,它会再次安装到不同的位置。

/usr/lib/python2.7/dist-packages

pip 应该做的是跳过全局安装的任何 python 包,对吗?

【问题讨论】:

  • 嗯,没有。你应该做的是停止混合pipapt :)。您不能指望包管理器知道其他包管理器。相反,您应该注意不要使用尝试安装到相同前缀中的两个不同的包管理器。
  • 不要混用 pipapt 的 Ubuntu 安装。即使pip 安装在同一目录中,Ubuntu 也不会知道该软件包,您可以使用 apt 覆盖它。
  • 我同意你的评论,但这无法避免,有时 apt-get 上的包是预编译的,所以我想将它们用于安装和一些 pip 包,而不是在 apt-get 宇宙中所以我需要两全其美。也许我应该问的是如何将 pip 安装到与 apt-get 相同的位置?
  • 还有其他策略可以解决这个问题:许多需要编译的 python 包都可以作为二进制轮子使用。您可以选择使用 pip 安装这些,而不是自己编译。另一种策略是创建一个本地virtualenv,它知道其父级的包。
  • 我用过 virtualenv 你是说你可以创建一个知道apt-get 安装的包吗?另外,我很想听到建议/显示二进制轮子的答案?

标签: python ubuntu debian pip apt-get


【解决方案1】:

这里的关键是防止多个包管理器安装到同一个目录中。

一种策略是创建一个知道其父解释器包的virtualenv。这可以通过使用--system-site-packages 选项来完成。

virtualenv -p /usr/bin/python --system-site-packages py27
source py27/bin/activate

默认情况下,此环境不会为空。您可能需要比较 /usr/bin/python -m pip listpython -m pip list

另见question


对于许多(科学)包,pypi 上也有可用的轮子。 Wheels 已经是二进制的,因此不需要进一步编译。

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 2011-11-12
    • 2016-08-21
    • 2019-02-07
    • 2014-01-16
    • 2018-09-27
    • 2011-01-20
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多