我有一个相当简单的 Ubuntu (13.04) 桌面安装,它附带了几个 Ubuntu 打包的 Python 实用程序 - 这些实用程序位于 root 中/usr/lib/python2.7
并由 root 拥有。我称它们为“系统”Python 包。
我也用 Python 做了很多科学工作,所以我安装了 numpy、matplotlib 等工具pip
——这些工具/usr/local/lib/python2.7
位于我这里并归我所有(我chown
之所以这样称呼/usr/local
,是因为我是这台机器上唯一的用户)。我称这些为“本地”Python 包。我将本地路径放在系统路径前面,这样PYTHONPATH
我就可以优先加载本地包。
现在,我尝试升级使用安装的本地软件包之一pip
,但pip
失败了,因为它想在升级过程中卸载依赖系统软件包。
我对此有两个问题,分别从各个角度解决问题:
解决此问题的一种方法是pip
升级我的本地软件包并忽略系统安装的软件包(如果可能的话)。我可以防止pip
在本地包升级期间尝试卸载系统包,但只针对一个依赖项吗?
另一种方法是安装pip
软件包的较新版本,然后使用该版本来满足apt
相关工具中的依赖关系。有没有办法告诉 Ubuntu 一个pip
已安装的包将满足apt
依赖关系?
(我熟悉虚拟环境,但在这台机器上我只使用这一个环境,所以我真的想避免跟踪我是否在正确的虚拟环境中工作。)
答案1
如果你不想 pip 安装或卸载任何依赖项,你可以使用
pip install --no-deps package_name
请注意,在这种情况下,您有责任确保满足所安装软件包所需的不同依赖项。
要在升级包时使用它,请使用:
pip install -U --no-deps package_name
对于类似的问题,请参见升级时拖动已安装的 Python 包