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']