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

如果我意外地使用apt-get pip install了我已pip install的软件包,会发生什么? 我是否只是使用最新版本(即可能是我使用pip安装的版本)? 反过来会发生什么?

注意:我不在虚拟环境中使用Python(仅仅因为我不知道为什么要这样做 – 我使用Python作为数据分析工具,并且主要尝试使用最新版本的所有内容)。

正如@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 / did-package’的优先级高于’/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’中的版本未被卸载)然后您可以使用以下命令validationpip安装的版本是否正在使用的版本: python -c "import MODULE; print MODULE.__file__"

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

要添加到@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安装模块)

事实certificate我将/usr/lib/python2.7/dist-packages添加到/usr/local/lib/python2.7/dist-packages/easy-install.pth 。 只需从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']