pip是否会覆盖apt-get安装的软件包?


9

如果我不小心意外地pip install使用了apt-get预先安装的软件包会怎样?我是否可以简单地使用最新版本(即可能是我使用安装的最新版本pip)?反过来会怎样?

注意:我没有在虚拟环境中使用Python(只是因为我不知道为什么-我将Python用作数据分析工具,并且大多数情况下尝试使用所有组件的最新版本)。


如果我没记错的话,请不要使用apt-getpip
Lucio

Corerct,默认情况下pip将它们安装在/usr/local子目录或任何其他目录中。
蒂莫,2014年

3
但是,例如发生什么情况,例如,如果我先执行,apt-get install python-pandas然后执行pip install pandas,反之亦然?我的全局python安装如何知道要使用的两个版本?
Fred S

1
@FredS:在终端中运行以下命令,Python将按特定顺序搜索模块:python -c "import sys; print sys.path"
Timo 2014年

Answers:


3

正如@Timo在他的评论中提到的那样,python -c "import sys; print sys.path"它将为您提供Python安装的Python模块加载路径。在相对较新的版本16.04中,有三个注释目录(在我的10个目录中):

  • ''(应用程序的目录)
  • '/usr/local/lib/python2.7/dist-packages'(pip在其中安装模块)
  • '/usr/lib/python2.7/dist-packages'(其中apt安装模块)

然而,最需要注意的是,“ / usr / local / lib / python2.7 / dist-packages”的优先级高于“ /usr/lib/python2.7/dist-packages”。

如果您首先通过apt(-get)安装Python软件包,它将安装到'/usr/lib/python2.7/dist-packages'中。如果以后尝试使用pip安装模块,pip最初会警告您已经满足依赖关系,然后退出。添加--upgrade标志将强制pip安装,将模块安装到“ /usr/local/lib/python2.7/dist-packages”中。(注意输出也说,在版本“/usr/lib/python2.7/dist-packages”不卸载),然后,您可以验证PIP安装的版本是正在使用的使用下列之一:python -c "import MODULE; print MODULE.__file__"

这样,这表明通过pip安装的软件包将优先于系统安装的软件包,但不会覆盖从apt(-get)安装的任何软件包。


1

要添加到@Bryan Wyatt中,似乎(希望)PIP安装/升级的项目应该优先于(可能是较旧的)APT安装的软件包。我的系统的apt和pip路径颠倒了。应该是(忽略其他条目):

  • '/usr/local/lib/python2.7/dist-packages'(pip在其中安装模块)
  • '/usr/lib/python2.7/dist-packages'(其中apt安装模块)

但是由于我必须采取一些未知的措施,这些路径对我来说却以相反的顺序出现(忽略其他条目):

  • '/usr/lib/python2.7/dist-packages'(其中apt安装模块)
  • '/usr/local/lib/python2.7/dist-packages'(pip在其中安装模块)

事实证明,这是我没有加入/usr/lib/python2.7/dist-packages/usr/local/lib/python2.7/dist-packages/easy-install.pth。只需从easy-install.pth修复错误的行中删除该行即可。/usr/lib/python2.7/dist-packages仍然在我的路上,因为它是在以后的其他地方添加的。

作为附带说明,pprint将显示您的路径更好...即:

$ python -c "import sys; import pprint; pprint.pprint(sys.path)"
['',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.