pip卸载失败,操作系统拥有"" - 甚至在sudo

时间:2018-06-06 23:20:56

标签: python python-2.7 pip virtualenv

我正在为使用Python的客户开发DevOps项目。虽然我从未专业地使用它,但我知道一些事情,比如使用virtualenv和pip - 虽然不是很详细。

当我查看我正准备运行功能测试套件的分段盒时,我看到了混乱。全局安装了大量的软件包,以及安装在与项目的requirements.txt不匹配的virtualenv中的软件包。好吧,我想,还有很多清理工作。从全球包开始。

但是,我立刻遇到了问题:

➜  ~ pip uninstall PyYAML
Not uninstalling PyYAML at /usr/lib/python2.7/dist-packages, owned by OS

好的,有人必须完成一个' sudo pip安装PyYAML'。我想我知道如何解决它:

➜  ~ sudo pip uninstall PyYAML
Not uninstalling PyYAML at /usr/lib/python2.7/dist-packages, owned by OS
呃,显然我不是。 搜索显示用户安装绕过pip的软件包引起了一些类似的冲突,但是我不相信 - 为什么会知道它们,如果是这样的话?除非"其他"方式是将它们放在pip会使用的相同位置 - 但如果是这样的话,为什么在sudo下无法卸载?

2 个答案:

答案 0 :(得分:5)

关键不在于fromJSON("Kickstarter_2015-06-12.json", flatten=TRUE) > Error in parse_con(txt, bigint_as_char) : parse error: trailing garbage rency_trailing_code": true}} {"id" : 87222572, "robot_id" : (right here) ------^ 无法安装软件包,因为您没有足够的权限,但因为它不是通过pip安装的软件包,所以它不想卸载它

pip是OS程序包管理器安装的程序包所在的位置;因为它们由另一个包管理器处理(例如,在Ubuntu / Debian上为dist-packages,在Arch上为apt,在CentOS上为pacman / rpm,...){{1}不会触及它们(但仍然必须知道它们是已安装的软件包,因此它们可以用于满足yum - 已安装软件包的依赖关系。)

除非你使用正确的软件包管理器,否则你也应该避免触摸它们,即便如此,它们可能已经被自动安装以满足某些程序的依赖性,所以你可能不会在不破坏它们的情况下将它们删除。这通常可以很容易地检查,但具体方法取决于您使用的精确Linux发行版。

答案 1 :(得分:5)

Pip拒绝卸载这些软件包,因为Debian开发人员修补了它的行为。这允许您同时使用pipapt。 "原创" pip程序没有这样的功能

更新:我的回答仅与旧版本的Pip相关。对于最新版本,Pip配置为仅修改仅驻留在其主目录中的文件" - 对于Debian来说是/usr/local/lib/python3.*。对于最新的工具,当您尝试删除由apt安装的软件包时,您将收到以下错误:

对于pip 9.0.1-2.3~ubuntu1(从Ubuntu存储库安装):

Not uninstalling pyyaml at /usr/lib/python3/dist-packages, outside environment /usr

对于pip 10.0.1(原件,从pypi.org安装):

Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.