Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pip卸载失败,返回“0”;由操作系统所有";-即使在sudo统治下_Python_Python 2.7_Pip_Virtualenv - Fatal编程技术网

Python pip卸载失败,返回“0”;由操作系统所有";-即使在sudo统治下

Python pip卸载失败,返回“0”;由操作系统所有";-即使在sudo统治下,python,python-2.7,pip,virtualenv,Python,Python 2.7,Pip,Virtualenv,我正在为一个使用Python的客户机开发一个DevOps项目。虽然我从未专业地使用过它,但我知道一些事情,比如使用virtualenv和pip——尽管不是很详细 当我看着准备运行一个功能测试套件的暂存箱时,我看到了混乱。数以吨计的软件包在全球范围内安装,而那些安装在virtualenv中的软件包与项目的requirements.txt不匹配。好吧,我想,有很多清理工作。从全局包开始 然而,我立刻遇到了一个问题: ➜ ~ pip uninstall PyYAML Not uninstalling

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

当我看着准备运行一个功能测试套件的暂存箱时,我看到了混乱。数以吨计的软件包在全球范围内安装,而那些安装在virtualenv中的软件包与项目的requirements.txt不匹配。好吧,我想,有很多清理工作。从全局包开始

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

➜  ~ 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会知道呢?除非“其他”方法将它们放在pip将使用的相同位置-但如果是这种情况,为什么它无法在sudo下卸载?

关键不是因为您没有足够的权限,pip无法安装该软件包,而是因为它不是通过
pip
安装的软件包,所以它不想卸载它

dist-packages
是操作系统软件包管理器安装的软件包所在的位置;由于它们是由另一个软件包管理器处理的(例如Ubuntu/Debian上的
apt
、Arch上的
pacman
、CentOS上的
rpm
/
yum
pip
不会碰它们(但仍需了解它们,因为它们是已安装的软件包,因此可用于满足
pip
-已安装软件包的依赖关系)


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

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

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

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

对于
pip 10.0.1
(原装,安装于):


你尝试过以root用户身份卸载它吗?有些时候sudo还不够,我不得不
sudo su
itHuh?从来没有听说过这样的事情,尽管sudo相当于“sudo su”方法。不,不起作用,同样的消息。如果你使用virtualenv,为什么还要删除全局包?你遇到过任何问题吗在你的项目中有这些软件包吗?不是真的(或者还没有?)@AndriyMaletsky-我想我不应该太担心。但是作为这个堆栈的新成员,我只是有点偏执=)换句话说,不,不要这样做。谢谢你,先生,你的解释是有道理的。然而,这很奇怪(我在问题中也提到过):如果不是文件权限,是什么阻止pip删除它们?它是否保存了一些它可以触摸的东西的日志,以区别于它不能触摸的东西?我可以在常规pip中找到的两种“不卸载”消息来自;它们都没有说“由OS所有”,而且“由OS所有”在pip存储库中的任何位置都没有出现。我不确定在哪里可以找到Debian版本。我相信这个版本可以在这里找到:我相信它与这个补丁有关:
Not uninstalling pyyaml at /usr/lib/python3/dist-packages, outside environment /usr
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.