删除所有由pip安装的软件包的最简单方法是什么?

我试图修复我的一个virtualenvs – 我想重新安装所有的库回到生产匹配。

有没有一个快速简单的方法来做到这一点点?

我发现这个片段是一个替代解决scheme。 这是一个更优雅的删除图书馆比重buildvirtualenv:

pip freeze | xargs pip uninstall -y 

如果您通过VCS安装了软件包,则需要手动排除这些行,并手动删除软件包(从以下注释中提升):

 pip freeze | grep -v "^-e" | xargs pip uninstall -y 

我认为这是最新的

 virtualenv --clear MYENV 

这将适用于所有Mac,Windows和Linux系统。 在requirements.txt文件中获得所有pip包的列表(注意:如果存在,将会覆盖requirements.txt将创build新的。)

 pip freeze > requirements.txt 

现在要逐个删除

 pip uninstall -r requirements.txt 

如果我们想要一次删除所有的话

 pip uninstall -r requirements.txt -y 

方法1(用pip freeze

 pip freeze | xargs pip uninstall -y 

方法2(与pip list

 pip list | awk '{print $1}' | xargs pip uninstall -y 

方法3(用virtualenv

 virtualenv --clear MYENV 

最快的方法是完全重制virtualenv。 我假设你有一个与生产匹配的requirements.txt文件,如果没有的话:

 # On production: pip freeze > reqs.txt # On your machine: rmvirtualenv MYENV mkvirtualenv MYENV pip install -r reqs.txt 

在Windows上,如果pathconfiguration正确,可以使用:

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

类Unix系统应该是一个类似的情况:

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

只是一个警告,这是不完全可靠的,因为你可能遇到的问题,如“文件未find”,但它可能在某些情况下工作

编辑:为了清楚起见: unins是一个任意的文件,有这个命令执行时写出来的数据: pip freeze > unins

这个文件,然后用它来卸载上述软件包暗示的同意/事先批准通过pip uninstall -y -r unins

该文件在完成后最终被删除。

使用virtualenvwrapper函数:

 wipeenv 

请参阅wipeenv文档

其他使用pip listpip freeze答案必须包含--local否则它也将卸载在公共命名空间中find的软件包。

所以这里是我经常使用的片段

  pip freeze --local | xargs pip uninstall -y 

要么

  pip list --local | py -x "print(x.split()[0])" | xargs pip uninstall -y 

通过发行pip freeze --help了解更多关于此行为的信息

仅使用pip跨平台支持:

 #!/usr/bin/env python from sys import stderr from pip.commands.uninstall import UninstallCommand from pip import get_installed_distributions pip_uninstall = UninstallCommand() options, args = pip_uninstall.parse_args([ package.project_name for package in get_installed_distributions() if not package.location.endswith('dist-packages') ]) options.yes = True # Don't confirm before uninstall # set `options.require_venv` to True for virtualenv restriction try: print pip_uninstall.run(options, args) except OSError as e: if e.errno != 13: raise e print >> stderr, "You lack permissions to uninstall this package. Perhaps run with sudo? Exiting." exit(13) # Plenty of other exceptions can be thrown, eg: `InstallationError` # handle them if you want to. 

它是我知道的一个古老的问题,但我偶然发现,所以为了将来的参考你现在可以做到这一点:

 pip uninstall [options] <package> ... pip uninstall [options] -r <requirements file> ... 

-r, – 要求文件

卸载给定需求文件中列出的所有软件包。 该选项可以多次使用。

从pip文档版本8.1

这是适合我的命令:

 pip list | awk '{print $1}' | xargs pip uninstall -y 

这是我卸载所有Python包最简单的方法。

 from pip import get_installed_distributions from os import system for i in get_installed_distributions(): system("pip3 uninstall {} -y -q".format(i.key)) 

如果你正在运行virtualenv

 virtualenv --clear </path/to/your/virtualenv> 

例如,如果你的virtualenv是/Users/you/.virtualenvs/projectx ,那么你可以运行:

 virtualenv --clear /Users/you/.virtualenvs/projectx 

如果你不知道你的虚拟环境在哪里,你可以从激活的虚拟环境中运行which python来获取path

就我而言,我在MacOS上意外地安装了一些使用Homebrew安装的pip的软件包。 恢复到默认包最简单的方法是一个简单的:

 $ brew reinstall python 

或者,如果您使用的是pip3

 $ brew reinstall python3 

皮普无法知道它安装了哪些软件包,以及系统的软件包pipe理器安装了哪些软件包。 为此,你需要做这样的事情

对于基于rpm的发行版(用您安装了pip的python版本replacepython2.7):

 find /usr/lib/python2.7/ |while read f; do if ! rpm -qf "$f" &> /dev/null; then echo "$f" fi done |xargs rm -fr 

对于基于deb的分发:

 find /usr/lib/python2.7/ |while read f; do if ! dpkg-query -S "$f" &> /dev/null; then echo "$f" fi done |xargs rm -fr 

然后清理剩下的空目录:

 find /usr/lib/python2.7 -type d -empty |xargs rm -fr 

我发现最好的答案很具误导性,因为它会从您的发行版中删除所有(大多数?)python软件包,并可能使您的系统崩溃。