停止使用pip安装已经通过apt-get安装的依赖项

7

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

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

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

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

/usr/lib/python2.7/dist-packages
pip应该跳过全局安装的任何Python包,对吗?

3
好的,我的翻译如下:嗯,不行。你应该停止混合使用 pipapt :)。你不能指望一个包管理器了解其他包管理器。相反,你应该保证你不要同时使用两个不同的包管理器尝试安装到同一个前缀。 - cel
2
不要混合使用pipapt在Ubuntu上的安装。即使pip安装在相同的目录中,Ubuntu也不会知道该软件包,您可能会使用apt覆盖它。 - Bakuriu
3
我同意你的评论,但有时无法避免在apt-get上使用预编译的软件包,因此我想在安装时使用它们以及一些pip软件包,而不是在apt-get宇宙中使用它们,所以我需要两全其美。也许我现在应该问的是如何让pip安装到与apt-get相同的位置? - MarkK
1
有其他解决该问题的策略:许多需要编译的Python包都可以作为二进制轮使用。您可以选择使用pip安装这些而不是自己编译。另一种策略是创建一个本地的virtualenv,它知道其父级的软件包。 - cel
我已经使用了virtualenv,你是说你可以创建一个知道通过apt-get安装的软件包的虚拟环境吗?此外,我非常想听到一个建议/展示二进制轮子的答案。 - MarkK
1个回答

4

关键在于防止多个包管理器安装到同一目录中。

一种策略是创建一个意识到其父解释器包的虚拟环境。可以通过使用 --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

还可以参考这个 问题


对于许多(科学)软件包,PyPI 上也提供了预编译的 wheel 包。wheel 包已经是二进制文件,因此不需要进一步编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接