如何卸载使用pip install --user安装的软件包


218

--userpip 有一个选项,可以为每个用户安装Python软件包:

pip install --user [python-package-name]

我使用此选项在没有root访问权限的服务器上安装软件包。我现在需要的是在当前用户上卸载已安装的软件包。我试图执行以下命令:

pip uninstall --user [python-package-name]

但是我得到了:

no such option: --user

pip install --user除了手动查找和删除软件包外,如何卸载与之一起安装的软件包?

我发现这篇文章

pip无法从每个用户的站点软件包目录中卸载

描述了不支持从用户目录卸载软件包。根据文章,如果正确实施,则使用

pip uninstall [package-name]

安装的软件包也将在用户目录中搜索。但是对我来说仍然是一个问题。如果在系统范围和每个用户都安装了相同的软件包,该怎么办?如果有人需要针对特定​​用户目录怎么办?


1
不,您必须为每个user:group设置一个virtualenv,并为包含它的文件夹提供适当的系统权限。
danius

3
无法为所有用户在系统范围内安装软件包,然后为某些用户有选择地卸载它。如果该软件包是按原样安装的,--user那么不进行卸载--user将执行您想要的操作。
2015年

@tripleee:我没有整个权限系统,也不想这样做,我只需要为每个当前用户卸载它
Serjik 2015年

1
找出您没有权限删除的目录,并修复其权限,或者将其手动移到侧面。
2015年

Answers:


196

在Linux上使用Python 3.5和pip 7.1.2测试了这一情况之后,情况似乎是这样的:

  • pip install --user somepackage可以使用进行安装$HOME/.local和卸载pip uninstall somepackage

  • 无论是否somepackage同时在全系统范围内安装,都是如此。

  • 如果在两个地方都安装了该软件包,则只​​会卸载本地软件包。要使用卸载系统范围的软件包pip,请先在本地将其卸载,然后使用root特权再次运行相同的卸载命令。

  • 除了预定义的用户安装目录外,pip install --target somedir somepackage还将软件包安装到中somedir。无法使用从这样的位置卸载软件包pip。(但是在Github上实现了一个有点旧的未合并的pull请求,它实现了pip uninstall --target。)

  • 由于pip将要卸载的唯一位置是系统范围的和预定义的本地用户,因此您需要以pip uninstall相应用户身份运行才能从给定用户的本地安装目录中卸载。


2
这些陈述在虚拟环境中运行pip是否正确?
kbolino

在我的情况下,卸载并没有为PIP封装9.0.1工作仍安装在家里/./地方
GENOM

2
第2点在我的系统上似乎不正确。我在中jedi安装了系统软件包/usr/lib64/python2.7/site-packages/。当我这样做时,以普通用户的身份:pip install --user jedi 然后pip uninstall jedi,pip尝试卸载/usr/lib64/python2.7/site-packages/jedi,然后用踢出Permission denied。因此,如果--user不存在卸载命令,如何告诉卸载不要尝试/usr/lib64/python2.7/site-packages/jedi而是卸载~/.local/lib64/python3.6/site-packages/jedi
AstroFloyd

与@AstroFloyd完全相同
Nikana Reklawyks


9

但是,对于pip install --user some_pkg 在虚拟环境中使用的人员要小心。

$ path/to/python -m venv ~/my_py_venv
$ source ~/my_py_venv/bin/activate
(my_py_venv) $ pip install --user some_pkg
(my_py_venv) $ pip uninstall some_pkg
WARNING: Skipping some_pkg as it is not installed.
(my_py_venv) $ pip list
# Even `pip list` will not properly list the `some_pkg` in this case

在这种情况下,您必须停用当前的虚拟环境,然后使用相应的python/ pip可执行文件列出或卸载用户站点软件包:

(my_py_venv) $ deactivate
$ path/to/python -m pip list
$ path/to/python -m pip uninstall some_pkg

请注意,此问题是几年前报告的。似乎当前的结论是:在虚拟环境中--user无效pip,因为用户位置对于虚拟环境而言实际上没有任何意义。


3
为时已晚!,我--user在虚拟环境中使用过,是否有某种方法可以还原它,因为pip list它不起作用....
jnfran92 19/09/17

2
“而且目前的结论似乎是:-用户在虚拟环境的pip内部无效,因为用户位置对于虚拟环境而言实际上没有任何意义。” 同意 用户安装会破坏虚拟环境的整个目的。不幸的是,那里有很多不良的例子。
斯蒂芬·博世

4

我认为可以卸载带有--userflag的软件包。这个为我工作;

pip freeze --user | xargs pip uninstall -y

对于python 3;

pip3 freeze --user | xargs pip3 uninstall -y

但是以某种方式,这些命令不会卸载setuptools和pip。在这些命令之后(如果您确实想要干净的python),可以使用以下命令删除它们:

pip uninstall setuptools && pip uninstall pip


1
这是一个优雅的解决方案,对我来说效果很好。
斯蒂芬·博世

2

答案尚不可行。您必须手动将其删除。


在安装软件包时,存在一个追溯。在那之后,卸载从未成功。
syam

如何列出为给定软件包安装的所有pip文件(以便删除它们)?
AstroFloyd

实际上是不可能的,因为pip运行setup.py,后者运行外部代码。在完全删除setup.py之前,请不要担心,可能到2022年为止。
索林

2

正如@ thomas-lotze提到的那样,由于没有相应的--user选项,当前pip工具无法执行此操作。但是我发现我可以检入〜/ .local / bin并查找特定的pip#。#,在我看来它对应于--user选项。

就我而言:

antho@noctil: ~/.l/bin$ pwd
/home/antho/.local/bin
antho@noctil: ~/.l/bin$ ls pip*
pip  pip2  pip2.7  pip3  pip3.5

然后只需卸载特定的pip版本即可。


stackoverflow.com/a/11250821/14420,以查看浴池卸载的配方,例如./pip2 freeze | grep -v "^-e" | xargs pip uninstall -y,除以可编辑模式安装的软件包以外的所有内容
matt wilkie 18/08/28

0

我正在运行Anaconda 4.3.22版和python3.6.1环境,并且遇到了此问题。这是历史记录和修复方法:

pip uninstall opencv-python # -- the original step. failed.

ImportError: DLL load failed: The specified module could not be found.

我在python3.6环境中执行了此操作,并收到此错误。

python -m pip install opencv-python # same package as above.
conda install -c conda-forge opencv # separate install parallel to opencv
pip-install opencv-contrib-python # suggested by another user here. doesn't resolve it.

接下来,我尝试下载python3.6并将python3.dll放入该文件夹和各个文件夹中。没有改变。

最后,它解决了:

pip uninstall opencv-python

(仍然安装了另一个conda-forge版本)。这仅留下了conda版本,并且在3.6版本中有效。

>>>import cv2
>>>

加工!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.