删除所有由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上,如果path
configuration正确,可以使用:
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 list
或pip 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软件包,并可能使您的系统崩溃。