首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pip卸载失败并显示"owned by OS“-即使在sudo下也是如此

pip卸载失败并显示"owned by OS“-即使在sudo下也是如此
EN

Stack Overflow用户
提问于 2018-06-07 07:20:56
回答 2查看 795关注 0票数 2

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

当我看着我试图为运行功能测试套件做准备的登台框时,我看到了混乱。大量安装在全球的软件包,以及那些安装在virtualenv中的软件包与项目的requirements.txt不匹配。好吧,我想,有很多清理工作要做。从全局包开始。

然而,我立刻遇到了一个问题:

代码语言:javascript
复制
➜  ~ pip uninstall PyYAML
Not uninstalling PyYAML at /usr/lib/python2.7/dist-packages, owned by OS

好吧,一定是有人做了“sudo pip install PyYAML”。我想我知道如何修复它:

代码语言:javascript
复制
➜  ~ sudo pip uninstall PyYAML
Not uninstalling PyYAML at /usr/lib/python2.7/dist-packages, owned by OS

嗯,显然我不知道。搜索发现一些类似的冲突是由用户绕过pip安装软件包引起的,但我不相信-如果是这样的话,pip为什么会知道它们呢?除非“另一种”方法是将它们放在pip会使用的相同位置-但如果是这样的话,为什么在sudo下卸载失败?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 07:44:35

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

更新:我的答案只与旧版本的Pip相关。对于最新的版本,Pip被配置为只修改只存在于其“主目录”中的文件-即Debian的/usr/local/lib/python3.*。对于最新的工具,当您尝试删除由apt安装的软件包时,会收到以下错误

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

代码语言:javascript
复制
Not uninstalling pyyaml at /usr/lib/python3/dist-packages, outside environment /usr

对于pip 10.0.1 (原始版本,从pypi.org安装):

代码语言:javascript
复制
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.
票数 5
EN

Stack Overflow用户

发布于 2018-06-07 07:27:29

问题不是因为您没有足够的权限而导致pip无法安装包,而是因为它不是通过pip安装的包,所以它不想卸载它。

dist-packages是操作系统包管理器安装的包所在的位置;因为它们由另一个包管理器处理(例如Ubuntu/Debian上的apt、Arch上的pacman、CentOS上的rpm/yum等),pip不会接触它们(但仍然必须知道它们是已安装的包,所以它们可以用来满足pip-installed包的依赖性)。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50730946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档