ChatGPT解决这个技术问题 Extra ChatGPT

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

pip 有一个 --user 选项,可以为每个用户安装 Python 包:

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

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

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

但我得到了:

no such option: --user

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

我找到了这篇文章

pip cannot uninstall from per-user site-packages directory

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

pip uninstall [package-name]

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

不,您必须为每个 user:group 设置一个 virtualenv,并为包含它的文件夹提供适当的系统权限。
无法为所有用户在系统范围内安装软件包,然后为某些用户选择性地卸载它。如果软件包是作为 --user 安装的,那么在没有 --user 的情况下卸载将满足您的要求。
@tripleee:我没有系统范围的权限并且不想,我只需要为每个当前用户卸载它
找出您无权删除的目录,并修复其权限,或手动将其移到一边。

T
Thomas Lotze

在 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 上有一个有点旧的未合并拉取请求,它实现了 pip uninstall --target。)

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


这些语句对于在虚拟环境中运行 pip 是否准确?
就我而言,卸载不适用于 pip 9.0.1 软件包仍安装在 HOME/./local
第 2 点在我的系统上似乎并不正确。我在 /usr/lib64/python2.7/site-packages/ 中安装了一个系统包 jedi。当我这样做时,作为普通用户:pip install --user jedi,然后是 pip uninstall jedi,pip 尝试卸载 /usr/lib64/python2.7/site-packages/jedi,然后使用 Permission denied 退出。因此,如果卸载命令不存在 --user,我如何告诉卸载 not 尝试卸载 /usr/lib64/python2.7/site-packages/jedi 而卸载 ~/.local/lib64/python3.6/site-packages/jedi
这里和@AstroFloyd 完全一样
您能否为 pip uninstall --target 链接那个未合并的 MR?
H
Huy - Logarit

在 MacOS 上卸载包 'oauth2client' 的示例:

pip uninstall oauth2client

不知道为什么它有这么多的赞成票,因为它是错误的答案。这根本没有指定 --user 标志,如果您以 root 和用户身份安装了软件包,用户安装的软件包将保留。
@misantroop 仔细阅读答案。它说明了与接受的答案相同的内容(但解释较少)
Y
YaOzI

但请注意,对于那些在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

注意这个问题was reported few years agocurrent conclusion 似乎是:--user 在虚拟环境的 pip 中无效,因为用户位置对于虚拟环境没有真正意义。


太晚了!,我在虚拟环境中使用了 --user,有什么办法可以恢复它吗?因为 pip list 不起作用....
“而且目前的结论似乎是:--user 在虚拟环境的 pip 中无效,因为用户位置对于虚拟环境没有真正意义。”同意。用户安装破坏了虚拟环境的全部目的。不幸的是,有很多人这样做的坏例子。
t
thiras

我强烈建议您使用虚拟环境来安装 python 包。使用 virtualenv,您可以防止任何包冲突和与 python 相关的用户空间命令完全隔离。

要删除全局安装的所有软件包,请按照此操作;

可以卸载使用 --user 标志安装的软件包。这个对我有用;

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

现在你有了干净的python环境。您可以创建 virtualenv 并在其中安装包。


很好,它会卸载我曾经使用 --user 标志安装的所有软件包!现在在我的 Anaconda 环境中重新安装它们......
是的,但需要明确的是,这并没有回答最初的问题,而是卸载 all “用户”安装的软件包(因为 pip freeze --user 列出了使用 --user 安装的所有软件包),但是尽管如此,它在一些(有限的)情况下可能很有用。 (要卸载与 --user 一起安装的单个软件包 {foo},只需运行 pip uninstall {foo},因为接受的答案非常详细。)
@michael你是对的。我正在编辑答案以适应问题。谢谢通知
s
sorin

答案是不可能的。您必须手动将其删除。


在安装软件包时,有一个回溯。之后卸载就没有用了。
如何列出为给定软件包安装的所有文件 pip(以便我可以删除它们)?
实际上是不可能的,因为 pip 运行 setup.py 运行外部代码。在 setup.py 完全删除之前忘记它,可能到 2022 年它会。
a
a different ben

正如@thomas-lotze 所提到的,目前 pip 工具没有这样做,因为没有相应的 --user 选项。但我发现我可以签入 ~/.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 用于除以可编辑模式安装的软件包之外的所有内容
M
Marc Maxmeister

我正在运行 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
>>>

在职的!