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

How to uninstall a package installed with pip install --user

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

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

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

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

但是我得到了:

no such option: --user

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

我找到了这篇文章

说明不支持从用户目录卸载包。根据这篇文章,如果它被正确实施,那么

pip uninstall [package-name]

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

在 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 作为相应的用户从给定用户的本地安装目录卸载。

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

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

pip uninstall oauth2client

正如@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 版本卸载即可。

我是运行 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
>>>

工作中!

但要小心,对于那些在虚拟环境中使用 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 ago. And it seems that the current conclusion 是:--user 在虚拟环境的 pip 中无效,因为用户位置对于虚拟环境没有意义。

我强烈建议您使用虚拟环境进行 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 并在其中安装包。