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
安装的,那么在没有 --user
的情况下卸载将满足您的要求。
在 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
但请注意,对于那些在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。 current conclusion 似乎是:--user
在虚拟环境的 pip
中无效,因为用户位置对于虚拟环境没有真正意义。
--user
,有什么办法可以恢复它吗?因为 pip list
不起作用....
我强烈建议您使用虚拟环境来安装 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 环境中重新安装它们......
pip freeze --user
列出了使用 --user
安装的所有软件包),但是尽管如此,它在一些(有限的)情况下可能很有用。 (要卸载与 --user
一起安装的单个软件包 {foo}
,只需运行 pip uninstall {foo}
,因为接受的答案非常详细。)
答案是不可能的。您必须手动将其删除。
正如@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 版本卸载即可。
./pip2 freeze | grep -v "^-e" | xargs pip uninstall -y
用于除以可编辑模式安装的软件包之外的所有内容
我正在运行 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
>>>
在职的!
不定期副业成功案例分享
/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
?pip uninstall --target
链接那个未合并的 MR?