卸载用户在macOS High Sierra上使用pip安装的所有软件包

时间:2018-09-19 04:24:19

标签: python macos python-2.7 pip macos-high-sierra

由于错误,我使用pip在全局环境中安装了软件包。我想知道使用here提供的说明来卸载OS上已经存在的Python,然后使用over here提供的说明使用homebrew重新安装它是个好主意吗?或者有什么办法摆脱我使用pip安装的所有软件包及其依赖项。

我在macOS High Sierra上使用Python 2.7.10。 编辑:建议方法的问题:

根据CloC在评论部分的建议,我尝试通过键入

从全局环境中卸载所有软件包。
pip freeze > to_delete.txt

然后

sudo -H pip uninstall -y -r to_delete.txt

但是我在终端中遇到以下错误:

Exception: Traceback (most recent call last): File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/basecommand.py", line 141, in main status = self.run(options, args) File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/commands/uninstall.py", line 74, in run auto_confirm=options.yes, verbose=self.verbosity > 0, File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/req/req_install.py", line 864, in uninstall uninstalled_pathset.remove(auto_confirm, verbose) File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/req/req_uninstall.py", line 221, in remove renames(path, new_path) File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/utils/misc.py", line 276, in renames shutil.move(old, new) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move copytree(src, real_dst, symlinks=True) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree raise Error, errors Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/macholib/dyld.py', '/private/tmp/pip-uninstall-3QWFII/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/macholib/dyld.py', "[Errno 1] Operation not permitted: '/private/tmp/pip-uninstall-3QWFII/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/macholib/dyld.py'"), [...], "[Errno 1] Operation not permitted: '/private/tmp/pip-uninstall-3QWFII/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/macholib'")]

3 个答案:

答案 0 :(得分:2)

您当然不应该重新安装python才能进行全新的软件包安装。

您可以通过首先列出并卸载它们来轻松地从全局环境中卸载所有软件包:

pip freeze > to_delete.txt

然后:

pip uninstall -y -r to_delete.txt

如果不想全部卸载,则可以删除要保留在第一步中创建的to_delete.txt文件中的行。

答案 1 :(得分:1)

我知道我的回答晚了,但它可能对某人有所帮助。

Windows 环境

pip freeze > unins && pip uninstall -y -r unins && del unins

Linux 环境

pip freeze > unins && pip uninstall -y -r unins && rm unins

使用上述命令,您可以删除您使用 pip 命令安装的所有软件包

答案 2 :(得分:0)

  

有什么方法可以摆脱我使用pip安装的所有软件包及其依赖性。

如果要使用--user选项安装软件包,则解决方案很简单:列出所有用户安装的软件包并批量卸载:

$ pip list --format=freeze | xargs pip uninstall -y

但是,由于您已经在系统范围内安装了软件包(使用sudo),因此该命令有些麻烦。 MacOS将某些软件包作为系统的一部分提供;它们位于/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python下。您既不能卸载这些软件包,也不能在系统目录中安装其他软件包。您通过sudo pip install安装的每个软件包都位于/Library/Python/2.7/site-packages下,以确保未修改或删除OS文件。因此,解决方案是:

  1. 列出pip可定位的所有软件包
  2. 过滤掉安装在/Library/Python/2.7/site-packages下的内容
  3. 按名称卸载它们

bash中的示例:

$ pip list --format=freeze | cut -d= -f1 | \
  xargs -I {} bash -c 'pip show {} | ( grep -q "Location: /Library/Python/2.7/site-packages" && echo {} )' | \
  xargs pip uninstall -y

警告

这将卸载未预装MacOS的所有系统软件包!如果您在系统范围内安装了pip本身,例如通过sudo easy_install pip。另外,可能还有其他工具安装的软件包,例如Virtualbox在名为vboxapi的软件包中安装python绑定-这也将被卸载。最好列出软件包名称:

$ pip list --format=freeze | cut -d= -f1 | \
  xargs -I {} bash -c 'pip show {} | ( grep -q "Location: /Library/Python/2.7/site-packages" && echo {} )'

分析结果并在单独的命令中卸载选定的软件包。